Jersey:针对一个DTO的不同JSON过滤器
我正在使用Jersey(JaxRS和Jackson)。Jersey:针对一个DTO的不同JSON过滤器
我有一个学生DTO。
class StudentDTO {
private Integer id;
private String name, className, grade;
private String createdAt, modifiedAt;
// getter, setter for all private members above
我想让DTO在创建,读取和更新中重复使用。
但是,对于创建,只允许name,className和grade。对于更新,只允许className和grade。
我目前的解决方案是使用三个不同的DTO类,一个用于创建,一个用于更新,另一个用于读取。
如何做到这一点只有一个DTO类?
尝试为每个案例创建自定义序列化器。
通过扩展StdSerializer<T>
创建自定义序列化和重写serialize(T value, JsonGenerator gen, SerializerProvider provider)
方法和ObjectMapper
registrate它
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(StudentDTO.class, new CustomSerializer());
mapper.registerModule(module);
一个问题。如果你创建了一个对象,除了name,className和grade之外的字段是空的? YOW可以在课堂上尝试使用注释@JsonInclude(Include.NON_NULL)
。
请通过包括一个相关的代码snippit来改善答案。链接往往过时。 –
@ M.leRutte好的,没问题 –
您可以尝试使用所需的参数重载构造函数.. – Coder
重载构造函数不能用于过滤请求参数。杰克逊将映射到类成员,即使他们是私人的,而不是getter/setter/constructor。 – Kuzunoha
我个人认为3个DTO在语义上更好。它给出了适当的API文档,而不必记住每个情况下哪些字段应该存在或不存在。我的两美分;)也如果你可以让他们不可变... –