在spring应用程序中,我收到一个JSON请求,它使用默认的反序列化器映射到POJO。该课程如下所示:
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public class ParamModel implements Serializable {
private String fieldOne;
private String fieldTwo;
private String fieldThree;
// setters and getters
}
我也在执行自定义验证(静态导入),可能会更改setter中的值:
public String getFieldOne() {
return fieldOne;
}
public void setFieldOne(String fieldOne) {
this.fieldOne = fixFieldOne(fieldOne);
}
// similar getters and setters for other fields
验证方法名称的格式类似于fix {FieldName_in_PascalCase},例如fixFieldOne()。
我有一个包含验证方法的类:
public class Validate {
public static String fixFieldOne(String fieldOne) {
// do stuff to fieldOne
return fieldOne;
}
// validation methods for other fields
}
我想做一些像编写自定义反序列化器的东西:
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
@SomeAnnotation(using = Validation.class)
public class ParamModel implements Serializable {
// fields, setters and getters
// not calling the validation methods explicitly from setters anymore
}
这样,它会从名称中调用各自的验证方法(比如说我可以编写一个类,它将取一个名称并从验证类中解析出正确的方法名称),然后setter实际设置值,而我没有手动调用每个setter中的方法。因为大多数情况下,setter和getter是使用IDE提供的一些自动完成工具生成的,当字段不断增加时,它会变得乏味。
此外,在这种情况下,当有大约一百个字段时,普遍接受的做法是什么。