Java 组合多个重复注释

Java 组合多个重复注释,java,annotations,jax-rs,bean-validation,Java,Annotations,Jax Rs,Bean Validation,我有几个json属性,这些属性应该由多个aanotation处理 根据设计的最佳实践,我应该有多个重复注释(来自标准库),还是应该创建一个自定义注释来一起处理它们 例如,哪个版本是beeter: public class A{ private static final String DATE_PATTERN = "yyyy-MM-dd"; @JsonProperty private String name; @JsonFormat(shape = JsonFo

我有几个json属性,这些属性应该由多个aanotation处理

根据设计的最佳实践,我应该有多个重复注释(来自标准库),还是应该创建一个自定义注释来一起处理它们

例如,哪个版本是beeter:

public class A{
    private static final String DATE_PATTERN = "yyyy-MM-dd";

    @JsonProperty
    private String name;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date1;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date2;



    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_PATTERN)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate rdate3;
}


public class B{


    @JsonProperty
    private String name;

    @customeDateFormatter
    private LocalDate date1;

    @customeDateFormatter
    private LocalDate date2;

    @customeDateFormatter
    private LocalDate rdate3;
}

在另一个类中定义的
@customeDateFormatter
中,由于许多原因,重复自己被认为是不好的做法,因此在本例中,使用自定义注释的版本显然是更好的选择。然而,这只有在配置始终与示例中相同的情况下才有意义。如果自定义注释只能使用一次或两次,因为其他字段需要轻微变化,那么这可能不会有多大改进。

为什么要对格式和序列化程序进行注释

如果您只注册JSR310模块,Jackson将自动为您执行此操作

证明

公共A类{
@JsonProperty私有字符串名称;
@JsonProperty private LocalDate date1;
@JsonProperty私有LocalDate日期2;
@JsonProperty私有LocalDate rdate3;
公共A(){
}
公共A(字符串名、LocalDate date1、LocalDate date2、LocalDate rdate3){
this.name=名称;
this.date1=date1;
this.date2=date2;
this.rdate3=rdate3;
}
@凌驾
公共字符串toString(){
返回“A[name=“+this.name+”,date1=“+this.date1+
“,date2=“+this.date2+”,rdate3=“+this.rdate3+””;
}
}
ObjectMapper mapper=new ObjectMapper()
.registerModule(新的JavaTimeModule())//或:.FindAndRegisterModule()
.configure(SerializationFeature.WRITE_DATES_作为时间戳,false)
;
A=新的A(“Foo”,LocalDate.of(2000,1,1),LocalDate.now(),LocalDate.of(2999,12,31));
系统输出打印项次(a);
字符串json=mapper.writeValueAsString(a);
System.out.println(json);
a2=mapper.readValue(json,A.class);
系统输出打印LN(a2);
输出

A[name=Foo,date1=2000-01-01,date2=2018-05-01,rdate3=2999-12-31]
{“name”:“Foo”,“date1”:“2000-01-01”,“date2”:“2018-05-01”,“rdate3”:“2999-12-31”}
A[name=Foo,date1=2000-01-01,date2=2018-05-01,rdate3=2999-12-31]