微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

json – 在Spring 3 MVC下的Jackson自定义序列化

我有几个POJO看起来像这样:

class Items {
    List

我希望能够使用自定义格式序列化Item中的Date字段(在日期中添加前缀,例如“Date:xxx”),但我不想总是这样做(因为它被其他消费者使用)它不需要此前缀),仅在特定情况下.

如果我使用@JsonSerialize(使用= CustomDateSerializer.class)注释Item的getInsertionDate()我可能会使这个工作,但是,我不想这样做,因为我不总是想要使用此方法序列化此字段,仅在特定情况下.

理想情况下,我会在我想要自定义序列化的控制器中执行此操作:

@JsonSerialize(using = CustomDateSerializer.class)
public List

其中CustomDateSerializer扩展了SerializerBase< Date>并且Jackson会发现它应该使用认的序列化程序序列化List中的每个项目,当它遇到Date对象时它应该使用我的自定义序列化程序.当然这不起作用,因为不是如何使用@JsonSerialize,但有没有办法让这个工作不是用包装器包装Item并在我想要自定义序列化时使用该包装器?我是否以错误的方式思考这个问题,还有另一种方法可以做到这一点吗?

请注意,我正在使用Spring MVC,所以我不是直接调用序列化.

任何帮助将非常感激 :)

最佳答案
问题是如果它是服务端点方法,杰克逊没有在getItems()上看到注释;它通常只传递类型List< Item>春天决定.使用JAX-RS(如Jersey),可以传递与该方法相关的注释(也许Spring也有一些方法);虽然它需要来自集成代码(对于JAX-RS,Jackson JAX-RS JSON提供程序模块)的更多支持来传递它.

实际创建单独的POJO(而不是传递List类型)可能更容易,以便您可以添加必要的注释.

如果您直接使用Jackson,您还可以使用ObjectWriter并指定要使用的认日期格式.但是我不知道Spring是否允许你这样做(大多数框架都没有,只暴露了ObjectMapper的可配置性).

还有一个注意事项 – 您可以使用Dates(和Jackson 2.x)上的简单注释代替自定义序列化程序(和/或反序列化程序):

public class DateStuff {
  @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="'Date:'yyyy'-'MM'-'dd")
  public Date date;
}

指定每个属性格式覆盖.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐