2016-09-21 129 views
2

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

@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:

我创建了一个简单的弹簧启动项目来测试这一点,并能正常工作。但是当我在我的大型项目中使用这种方法时,日期转换不会发生。 Jackson2ObjectMapperBuilder有没有什么可以重写?

+0

你可以添加当前的序列化和欲望的例子吗?您可以随时注释您的bean以使用自定义序列化,Spring-Boot将使用它。 – jbarrueta

+0

@jbarrueta我的课程在一个jar文件中,我无法在它们上添加注释。我正在使用Jackson mixins进行序列化 –

+0

这可能会帮助您:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the- jackson-objectmapper – jbarrueta

回答

3

您可以通过很多方式在Spring引导应用程序中自定义Jackson序列化程序。请考虑检查春季启动参考指南中关于杰克逊的文档:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#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-

+0

谢谢@Lakatos。我更新了mixin,但仍然没有生效。我更新了原始帖子中的代码。 –

+0

我在一个单独的程序中实现了这个功能,这很好。但是,当我在我的应用程序中使用它时,它没有返回格式化的日期。我正在使用EnableMvc注释的几个罐子扩展类。我怀疑这导致序列化执行。 –

1

您可以自定义日期格式(我知道这是你的文章的主要原因)通过设置属性

spring.jackson.date-format= 
# Date format string or a fully-qualified date format class name. 
For instance `yyyy-MM-dd HH:mm:ss`. 
+0

谢谢@dimuha。但我有多个日期字段,每个都有不同的格式。 –