一尘不染

Spring Boot-自定义JSON序列化

spring-boot

在使用Jackson库时,我通常使用mixins来执行自定义序列化和反序列化。我在Spring
Boot应用程序中的RestController具有与以下所列类似的方法。我猜Spring
Boot使用Jackson将VerifyAccountResponse序列化为字符串。但是,当它们转换为字符串时,这会将我的日历/日期对象转换为长值。我可以通过使用自定义序列化程序将它们转换为适当的格式。但是,我必须在序列化后将返回类型更改为对象。有没有办法保留相同的签名并将自定义序列化器添加到Spring
Boot执行的默认序列化中。

@RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<VerifyAccountResponse> verifyAccount(@RequestBody VerifyAccountRequest request) {

    VerifyAccountResponse response = service.verifyAccount(request);

    return new ResponseEntity<VerifyAccountResponse>(response, HttpStatus.OK);
}

编辑:

Updated the below based on the answers , but mixin doesn't seem to take effect -

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.mixIn(ConnectStatus.class, com.datacast.service.util.DateFormatSerializerMixin.class);

    return builder;
}

编辑2:

我创建了一个简单的springboot项目来进行测试,效果很好。但是,当我在较大的项目中使用此方法时,日期转换不会发生。有什么可以替代Jackson2ObjectMapperBuilder的吗?


阅读 1336

收藏
2020-05-30

共1个答案

一尘不染

您可以通过多种方式在Spring Boot应用程序中自定义Jackson序列化程序。请考虑查看Spring Boot参考指南中有关jackson的文档:

https://docs.spring.io/spring-boot/docs/current-
SNAPSHOT/reference/html/howto.html#howto-customize-the-jackson-
objectmapper

您可以使用 Jackson2ObjectMapperBuilder 配置自定义序列化 程序

http://docs.spring.io/spring/docs/current/javadoc-
api/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.html#serializerByType-
java.lang.Class-com.fasterxml.jackson.databind。
JsonSerializer-

2020-05-30