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

Jersey: different JSON filter for one DTO

我正在使用 Jersey(JaxRS 和 Jackson)。

我有一个学生 DTO。

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

  // getter, setter for all private members above

我希望在创建、读取和更新中重复使用该 DTO。

但是,对于创建,只允许姓名、class姓名和成绩。对于更新,只允许class姓名和年级。

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

如何只使用一个 DTO class?

尝试为每种情况创建自定义序列化程序。
通过扩展 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之外的字段都是空的?你可以尝试在 class 级别上使用注释 @JsonInclude(Include.NON_NULL)