From 8bdf5ab45cd70485a80b6393a4d51ff92929971d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Fri, 17 Sep 2021 22:45:48 +0800 Subject: [PATCH] perf($starter): inject ObjectMapper instead of creating one --- .../maf/common/bean/ResponseBodyBean.java | 17 ++++------ .../configuration/JacksonConfiguration.java | 10 ++++-- .../springcloudstarter/util/ResponseUtil.java | 33 ++++++++++--------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/common/src/main/java/com/jmsoftware/maf/common/bean/ResponseBodyBean.java b/common/src/main/java/com/jmsoftware/maf/common/bean/ResponseBodyBean.java index 8bb126e9..e81ff309 100644 --- a/common/src/main/java/com/jmsoftware/maf/common/bean/ResponseBodyBean.java +++ b/common/src/main/java/com/jmsoftware/maf/common/bean/ResponseBodyBean.java @@ -3,7 +3,6 @@ import cn.hutool.json.JSON; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONUtil; -import com.fasterxml.jackson.annotation.JsonFormat; import com.jmsoftware.maf.common.constant.UniversalDateTime; import com.jmsoftware.maf.common.exception.BaseException; import com.jmsoftware.maf.common.exception.BizException; @@ -26,9 +25,6 @@ @Data @SuppressWarnings("unused") public class ResponseBodyBean implements Serializable { - /** - * The constant serialVersionUID. - */ private static final long serialVersionUID = 4645469240048361965L; /** @@ -39,7 +35,6 @@ public class ResponseBodyBean implements Serializable { * 23:08:46' */ @Setter(AccessLevel.NONE) - @JsonFormat(pattern = UniversalDateTime.DATE_TIME_FORMAT) private final LocalDateTime timestamp = LocalDateTime.now(); /** * Default status is 200 OK. @@ -97,7 +92,7 @@ public static ResponseBodyBean ofStatus(@NonNull final HttpStatus status, * @param data data to be responded to client * @return response body for ExceptionControllerAdvice */ - public static ResponseBodyBean ofStatus(@NonNull final HttpStatus status, final T data) { + public static ResponseBodyBean ofStatus(@NonNull final HttpStatus status, @Nullable final T data) { ResponseBodyBean responseBodyBean = new ResponseBodyBean<>(); responseBodyBean.setStatus(status.value()); responseBodyBean.setMessage(status.getReasonPhrase()); @@ -118,7 +113,7 @@ public static ResponseBodyBean ofStatus(@NonNull final HttpStatus status, * @return response body for ExceptionControllerAdvice */ public static ResponseBodyBean ofStatus(@NonNull final Integer status, @NonNull final String message, - final T data) { + @Nullable final T data) { ResponseBodyBean responseBodyBean = new ResponseBodyBean<>(); responseBodyBean.setStatus(status); responseBodyBean.setMessage(message); @@ -138,7 +133,7 @@ public static ResponseBodyBean ofStatus(@NonNull final Integer status, @N * @return response body */ public static ResponseBodyBean setResponse(@NonNull final Integer status, @NonNull final String message, - final T data) + @Nullable final T data) throws BaseException { if (!HttpStatus.valueOf(status).is2xxSuccessful()) { throw new BaseException(status, message, data); @@ -167,7 +162,7 @@ public static ResponseBodyBean ofSuccess() { * @param data data to be responded to client. * @return response body */ - public static ResponseBodyBean ofSuccess(final T data) { + public static ResponseBodyBean ofSuccess(@Nullable final T data) { ResponseBodyBean responseBodyBean = new ResponseBodyBean<>(); responseBodyBean.setData(data); return responseBodyBean; @@ -194,7 +189,7 @@ public static ResponseBodyBean ofSuccess(@NonNull final String message) { * @param message message to be responded * @return response body */ - public static ResponseBodyBean ofSuccess(final T data, + public static ResponseBodyBean ofSuccess(@Nullable final T data, @NonNull final String message) { ResponseBodyBean responseBodyBean = new ResponseBodyBean<>(); responseBodyBean.setMessage(message); @@ -284,7 +279,7 @@ public static ResponseBodyBean ofException(@NonN public static JSON of(@NonNull String message, @Nullable Object data, @NonNull Integer status) { val responseBodyBean = ResponseBodyBean.ofStatus(status, message, data); val config = new JSONConfig(); - config.setIgnoreNullValue(false).setDateFormat("yyyy-MM-dd HH:mm:ss"); + config.setIgnoreNullValue(false).setDateFormat(UniversalDateTime.DATE_TIME_FORMAT); return JSONUtil.parse(responseBodyBean, config); } } diff --git a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/JacksonConfiguration.java b/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/JacksonConfiguration.java index 8d8c5989..4b0c52c4 100644 --- a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/JacksonConfiguration.java +++ b/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/JacksonConfiguration.java @@ -6,7 +6,6 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.jmsoftware.maf.common.constant.UniversalDateTime; import lombok.RequiredArgsConstructor; -import lombok.val; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.JacksonProperties; import org.springframework.context.annotation.Bean; @@ -33,12 +32,17 @@ public LocalDateTimeSerializer localDateTimeSerializer() { } @Bean - public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(LocalDateTimeSerializer localDateTimeSerializer) { + public LocalDateTimeDeserializer localDateTimeDeserializer() { var pattern = UniversalDateTime.DATE_TIME_FORMAT; if (StrUtil.isNotBlank(this.jacksonProperties.getDateFormat())) { pattern = this.jacksonProperties.getDateFormat(); } - val localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern)); + return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern)); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(LocalDateTimeSerializer localDateTimeSerializer, + LocalDateTimeDeserializer localDateTimeDeserializer) { return jackson2ObjectMapperBuilder -> jackson2ObjectMapperBuilder .serializerByType(LocalDateTime.class, localDateTimeSerializer) .deserializerByType(LocalDateTime.class, localDateTimeDeserializer) diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/util/ResponseUtil.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/util/ResponseUtil.java index 2270c644..250a6bef 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/util/ResponseUtil.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/util/ResponseUtil.java @@ -3,9 +3,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.jmsoftware.maf.common.bean.ResponseBodyBean; import com.jmsoftware.maf.common.exception.BaseException; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; import org.springframework.http.HttpStatus; +import org.springframework.lang.Nullable; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -21,11 +24,9 @@ **/ @Slf4j @SuppressWarnings("unused") +@RequiredArgsConstructor public class ResponseUtil { - private static final ObjectMapper MAPPER = new ObjectMapper(); - - private ResponseUtil() { - } + private final ObjectMapper objectMapper; /** * Write data JSON to response. @@ -34,12 +35,13 @@ private ResponseUtil() { * @param httpStatus HTTP status * @param data Data */ - public static void renderJson(final HttpServletResponse response, final HttpStatus httpStatus, final Object data) { - standardizeHttpServletResponse(response, httpStatus); + public void renderJson(@NonNull HttpServletResponse response, @NonNull HttpStatus httpStatus, + @Nullable Object data) { + this.standardizeHttpServletResponse(response, httpStatus); val responseBodyBean = ResponseBodyBean.ofStatus(httpStatus.value(), httpStatus.getReasonPhrase(), data); try { - response.getWriter().write(MAPPER.writeValueAsString(responseBodyBean)); + response.getWriter().write(this.objectMapper.writeValueAsString(responseBodyBean)); } catch (IOException e) { log.error("Error occurred when responding a data JSON.", e); } @@ -52,12 +54,12 @@ public static void renderJson(final HttpServletResponse response, final HttpStat * @param httpStatus the http status * @param message the message */ - public static void renderJson(final HttpServletResponse response, final HttpStatus httpStatus, - final String message) { - standardizeHttpServletResponse(response, httpStatus); + public void renderJson(@NonNull HttpServletResponse response, @NonNull HttpStatus httpStatus, + @NonNull String message) { + this.standardizeHttpServletResponse(response, httpStatus); val responseBodyBean = ResponseBodyBean.ofStatus(httpStatus.value(), message, null); try { - response.getWriter().write(MAPPER.writeValueAsString(responseBodyBean)); + response.getWriter().write(this.objectMapper.writeValueAsString(responseBodyBean)); } catch (IOException e) { log.error("Error occurred when responding a data JSON.", e); } @@ -69,14 +71,14 @@ public static void renderJson(final HttpServletResponse response, final HttpStat * @param response Response * @param exception Exception */ - public static void renderJson(final HttpServletResponse response, final BaseException exception) { + public void renderJson(@NonNull HttpServletResponse response, @NonNull BaseException exception) { val httpStatus = HttpStatus.valueOf(exception.getCode()); - standardizeHttpServletResponse(response, httpStatus); + this.standardizeHttpServletResponse(response, httpStatus); val responseBodyBean = ResponseBodyBean.ofStatus(exception.getCode(), exception.getMessage(), exception.getData()); try { - response.getWriter().write(MAPPER.writeValueAsString(responseBodyBean)); + response.getWriter().write(this.objectMapper.writeValueAsString(responseBodyBean)); } catch (IOException e) { log.error("Error occurred when responding an exception JSON.", e); } @@ -88,8 +90,7 @@ public static void renderJson(final HttpServletResponse response, final BaseExce * @param response the response * @param httpStatus the http status */ - private static void standardizeHttpServletResponse(final HttpServletResponse response, - final HttpStatus httpStatus) { + private void standardizeHttpServletResponse(HttpServletResponse response, HttpStatus httpStatus) { response.setHeader("Access-Control-Allow-Origin", ALL); response.setHeader("Access-Control-Allow-Methods", ALL); response.setContentType("application/json;charset=UTF-8");