泽西岛:一个DTO的不同JSON过滤器

时间:2017-10-06 07:46:31

标签: java jackson jersey jax-rs n-tier-architecture

我正在使用泽西(JaxRS和杰克逊)。

我有学生DTO。

class StudentDTO {
  private Integer id;
  private String name, className, grade;
  private String createdAt, modifiedAt;

  // getter, setter for all private members above

我希望在创建,阅读和更新中重用DTO。

但是,对于create,只允许使用name,className和grade。对于更新,仅允许className和grade。

我目前的解决方案是使用三种不同的DTO类,一种用于创建,一种用于更新,一种用于读取。

如何只使用一个DTO课程?

1 个答案:

答案 0 :(得分:0)

尝试为每种情况创建自定义序列化程序。
通过扩展StdSerializer<T>创建自定义序列化程序并覆盖serialize(T value, JsonGenerator gen, SerializerProvider provider)方法并在ObjectMapper中注册它

ObjectMapper mapper = new ObjectMapper(); 
SimpleModule module = new SimpleModule();
module.addSerializer(StudentDTO.class, new CustomSerializer());
mapper.registerModule(module);


还有一个问题。如果创建对象,除name,className和grade之外的字段为空?你可以尝试在课堂上使用注释@JsonInclude(Include.NON_NULL)