泽西岛:一个 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)
。
我正在使用 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)
。