Skip to content

Commit

Permalink
perf($starter): inject ObjectMapper instead of creating one
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Sep 17, 2021
1 parent 7e4e7be commit 8bdf5ab
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -26,9 +25,6 @@
@Data
@SuppressWarnings("unused")
public class ResponseBodyBean<T> implements Serializable {
/**
* The constant serialVersionUID.
*/
private static final long serialVersionUID = 4645469240048361965L;

/**
Expand All @@ -39,7 +35,6 @@ public class ResponseBodyBean<T> 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.
Expand Down Expand Up @@ -97,7 +92,7 @@ public static <T> ResponseBodyBean<T> ofStatus(@NonNull final HttpStatus status,
* @param data data to be responded to client
* @return response body for ExceptionControllerAdvice
*/
public static <T> ResponseBodyBean<T> ofStatus(@NonNull final HttpStatus status, final T data) {
public static <T> ResponseBodyBean<T> ofStatus(@NonNull final HttpStatus status, @Nullable final T data) {
ResponseBodyBean<T> responseBodyBean = new ResponseBodyBean<>();
responseBodyBean.setStatus(status.value());
responseBodyBean.setMessage(status.getReasonPhrase());
Expand All @@ -118,7 +113,7 @@ public static <T> ResponseBodyBean<T> ofStatus(@NonNull final HttpStatus status,
* @return response body for ExceptionControllerAdvice
*/
public static <T> ResponseBodyBean<T> ofStatus(@NonNull final Integer status, @NonNull final String message,
final T data) {
@Nullable final T data) {
ResponseBodyBean<T> responseBodyBean = new ResponseBodyBean<>();
responseBodyBean.setStatus(status);
responseBodyBean.setMessage(message);
Expand All @@ -138,7 +133,7 @@ public static <T> ResponseBodyBean<T> ofStatus(@NonNull final Integer status, @N
* @return response body
*/
public static <T> ResponseBodyBean<T> 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);
Expand Down Expand Up @@ -167,7 +162,7 @@ public static <T> ResponseBodyBean<T> ofSuccess() {
* @param data data to be responded to client.
* @return response body
*/
public static <T> ResponseBodyBean<T> ofSuccess(final T data) {
public static <T> ResponseBodyBean<T> ofSuccess(@Nullable final T data) {
ResponseBodyBean<T> responseBodyBean = new ResponseBodyBean<>();
responseBodyBean.setData(data);
return responseBodyBean;
Expand All @@ -194,7 +189,7 @@ public static <T> ResponseBodyBean<T> ofSuccess(@NonNull final String message) {
* @param message message to be responded
* @return response body
*/
public static <T> ResponseBodyBean<T> ofSuccess(final T data,
public static <T> ResponseBodyBean<T> ofSuccess(@Nullable final T data,
@NonNull final String message) {
ResponseBodyBean<T> responseBodyBean = new ResponseBodyBean<>();
responseBodyBean.setMessage(message);
Expand Down Expand Up @@ -284,7 +279,7 @@ public static <T, B extends BaseException> ResponseBodyBean<T> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.
Expand All @@ -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);
}
Expand All @@ -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);
}
Expand All @@ -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);
}
Expand All @@ -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");
Expand Down

0 comments on commit 8bdf5ab

Please sign in to comment.