相关疑难解决方法(0)

Spring Boot - 自定义JSON序列化

我通常使用mixins在使用Jackson Library时执行自定义序列化和反序列化.Spring Boot应用程序中的My 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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

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;
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

我创建了一个简单的弹簧启动项目来测试它,这很好.但是当我在我的大项目中使用这种方法时,日期转换不会发生.有没有什么可以覆盖Jackson2ObjectMapperBuilder?

java spring spring-mvc jackson spring-boot

5
推荐指数
2
解决办法
3万
查看次数

多个相同类型的杰克逊序列化器

我正在使用Jackson进行JSON序列化,并编写了一些自定义String序列化程序,一个用于类的每个getter方法.每个方法都返回相同的类型Set<String>,但每个方法使用不同的序列化程序.

不幸的是,杰克逊没有使用每个序列化器,每个方法一个,但是两个都使用一个序列化器.它似乎采用按字母顺序排列的任何方法,并将两种方法用于序列化程序.我期望的是第一种方法注释的序列化器用于第一种方法,第二种方法注释的序列化器用于第二种方法.调试似乎表明Jackson在地图中使用方法的返回类型键入了序列化程序(两者都相同).

一个例子:

public class FooBar {

  private Set<String> foos = new HashSet<String>();
  private Set<String> bars = new HashSet<String>();

  @JsonProperty("FooWrapper")
  @JsonSerialize(contentUsing = FooSerializer.class)
  public Set<String> getFoos() {
    return foos;
  }

  @JsonProperty("BarWrapper")
  @JsonSerialize(contentUsing = BarSerializer.class)
  public Set<String> getBars() {
    return bars;
  }
}
Run Code Online (Sandbox Code Playgroud)

有关如何getFoos()使用a 获取方法序列化的任何建议FooSerializer,以及getBars()使用BarSerializer?序列化的方法?在此示例中,BarSerializer将为两个方法调用.

请注意,如果我将其中一个方法的签名更改为另一个集合类型,以便它们不同 - List<String>例如 - 序列化可以工作.

提前致谢.

java json jackson

3
推荐指数
1
解决办法
3049
查看次数

标签 统计

jackson ×2

java ×2

json ×1

spring ×1

spring-boot ×1

spring-mvc ×1