提交 883e72ea authored 作者: 黄夏豪's avatar 黄夏豪

项目重构代码补充

上级 8d26a0e2
......@@ -64,7 +64,10 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>misc</artifactId>
</dependency>
<!--<dependency>-->
......
package com.tykj.dev.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.ser.std.DateSerializer;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import com.tykj.dev.misc.utils.DateFormatUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* 描述:使jackson能够正确的接收时间格式
* @author HuangXiahao
* @version V1.0
* @class Java8TimeConfig
* @data 2020/5/20
**/
@Configuration
public class Java8TimeConfig {
@Value("${spring.jackson.date-format}")
private String formatValue;
@Bean(name = "format")
DateTimeFormatter format() {
return DateTimeFormatter.ofPattern(formatValue);
}
@Bean
public ObjectMapper serializingObjectMapper(@Qualifier("format") DateTimeFormatter format) {
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(format));
javaTimeModule.addSerializer(Instant.class, new InstantCustomSerializer(format));
javaTimeModule.addSerializer(Date.class, new DateSerializer(false, new SimpleDateFormat(formatValue)));
javaTimeModule.addDeserializer(Instant.class, new InstantCustomDeserializer());
javaTimeModule.addDeserializer(Date.class, new DateCustomDeserializer());
return new ObjectMapper()
.registerModule(new ParameterNamesModule())
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerModule(javaTimeModule)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
static class InstantCustomSerializer extends JsonSerializer<Instant> {
private final DateTimeFormatter format;
private InstantCustomSerializer(DateTimeFormatter formatter) {
this.format = formatter;
}
@Override
public void serialize(Instant instant, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (instant == null) {
return;
}
String jsonValue = format.format(instant.atZone(ZoneId.systemDefault()));
jsonGenerator.writeString(jsonValue);
}
}
static class InstantCustomDeserializer extends JsonDeserializer<Instant>{
@Override
public Instant deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
String dateString = p.getText().trim();
if(StringUtils.isNotBlank(dateString)){
Date pareDate;
try {
pareDate = DateFormatUtil.pareDate(dateString);
if(null != pareDate){
return pareDate.toInstant();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
}
static class DateCustomDeserializer extends JsonDeserializer<Date>{
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
String dateString = p.getText().trim();
if(StringUtils.isNotBlank(dateString)){
try {
return DateFormatUtil.pareDate(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
}
/**
* Support for Java date and time API.
* @return the corresponding Jackson module.
*/
@Bean
public JavaTimeModule javaTimeModule() {
return new JavaTimeModule();
}
@Bean
public Jdk8Module jdk8TimeModule() {
return new Jdk8Module();
}
}
\ No newline at end of file
......@@ -7,4 +7,7 @@ management.endpoint.health.show-details=always
alibaba.cloud.access-key=****
alibaba.cloud.secret-key=****
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
......@@ -30,6 +30,10 @@
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
</project>
package com.tykj.dev.misc.exception;
import org.springframework.http.ResponseEntity;
/**
* 全局错误处理类,用于处理一些不容易定义的错误
* @author HuangXiahao
**/
public class ApiException extends Exception {
private ResponseEntity responseEntity;
public ApiException(ResponseEntity responseEntity) {
this.responseEntity = responseEntity;
}
public ResponseEntity getResponseEntity() {
return responseEntity;
}
public void setResponseEntity(ResponseEntity responseEntity) {
this.responseEntity = responseEntity;
}
}
package com.tykj.dev.misc.exception;
import com.tykj.dev.misc.utils.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 错误处理类
* 所有的报错信息都会通过本层的方法向外界返回
*
* @author HuangXiahao
**/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 报错信息都会通过这个方法处理并通过统一的返回方式进行返回
* @param e 报错信息
*/
@ResponseBody
@ExceptionHandler(Exception.class)
public ResponseEntity errorMessage(Exception e){
return ResultUtil.failed();
}
/**
* 业务错误
* @param e 报错信息
*/
@ResponseBody
@ExceptionHandler(ApiException.class)
public ResponseEntity errorMessage(ApiException e){
if (e.getResponseEntity()!=null){
return e.getResponseEntity();
}
return ResultUtil.failed();
}
/**
* 数据合法性验证报错会通过这个方法处理并通过统一的返回方式进行返回
* @param e 报错信息
*/
@ResponseBody
@ExceptionHandler(BindException.class)
public ResponseEntity errorMessage(BindException e){
BindingResult bindingResult = e.getBindingResult();
String message = null;
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
if (fieldError != null) {
message = fieldError.getField()+fieldError.getDefaultMessage();
}
}
return ResultUtil.failed(message);
}
/**
* 用户未登录时会通过这里处理
* @param e 报错信息
*/
@ResponseBody
@ExceptionHandler(AuthenticationException.class)
public ResponseEntity errorMessage(AuthenticationException e){
return ResultUtil.unauthorized();
}
/**
* 用户权限不足
* @param e 报错信息
*/
@ResponseBody
@ExceptionHandler(AccessDeniedException.class)
public ResponseEntity errorMessage(AccessDeniedException e){
return ResultUtil.forbidden();
}
}
package com.tykj.dev.misc.utils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
/**
* @author HuangXiahao
* @version V1.0
* @class ResultMessage
* @packageName com.example.hello.demo.resultObject
**/
public class ResultUtil<T> {
/**
* 成功返回结果
*
* @param data 获取的数据
*/
public static <T> ResponseEntity<T> success(T data) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8");
return new ResponseEntity<>(data,httpHeaders,HttpStatus.OK);
}
/**
* 成功返回结果
*
* @param data 获取的数据
*/
public static <T> ResponseEntity<T> success(T data,HttpHeaders headers) {
return new ResponseEntity<>(data,headers,HttpStatus.OK);
}
/**
* 失败返回结果
*/
public static <T> ResponseEntity<T> failed() {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
/**
* 失败返回结果
*/
public static <T> ResponseEntity<T> failed(T content) {
return new ResponseEntity<>(content,HttpStatus.BAD_REQUEST);
}
/**
* 失败返回结果
*/
public static <T> ResponseEntity<T> failed(HttpStatus httpStatus) {
return new ResponseEntity<>(httpStatus);
}
/**
* 失败返回结果
*/
public static <T> ResponseEntity<T> failed(HttpStatus httpStatus,T content) {
return new ResponseEntity<>(content,httpStatus);
}
/**
* 参数验证失败返回结果
*/
public static <T> ResponseEntity<T> validateFailed(T content) {
return failed(HttpStatus.BAD_REQUEST,content);
}
/**
* 未登录返回结果
*/
public static <T> ResponseEntity<T> unauthorized() {
return failed(HttpStatus.UNAUTHORIZED);
}
/**
* 未授权返回结果
*/
public static <T> ResponseEntity<T> forbidden() {
return failed(HttpStatus.FORBIDDEN);
}
}
......@@ -15,6 +15,72 @@
</parent>
<dependencies>
<!-- 使用usb接口连接打印机时必要的驱动 -->
<dependency>
<groupId>org.usb4java</groupId>
<artifactId>usb4java</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 使用usb接口连接打印机时必要的驱动 -->
<dependency>
<groupId>org.usb4java</groupId>
<artifactId>usb4java-javax</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.zebra</groupId>
<artifactId>sdk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/ZSDK_API.jar</systemPath>
</dependency>
<dependency>
<groupId>com.rfid</groupId>
<artifactId>sdk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/RFID.jar</systemPath>
</dependency>
<dependency>
<groupId>com.rxtx</groupId>
<artifactId>sdk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/RXTXcomm.jar</systemPath>
</dependency>
<dependency>
<groupId>com.seriaPort</groupId>
<artifactId>sdk</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/SerialPort.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>config</artifactId>
<exclusions>
<exclusion>
<groupId>com.tykj.dev</groupId>
<artifactId>rfid</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>device</artifactId>
<exclusions>
<exclusion>
<groupId>com.tykj.dev</groupId>
<artifactId>rfid</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论