使用jackson映射类的setter方法中的反射调用自定义方法

时间:2016-02-08 06:31:15

标签: java json spring jackson

在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提供的一些自动完成工具生成的,当字段不断增加时,它会变得乏味。

此外,在这种情况下,当有大约一百个字段时,普遍接受的做法是什么。

0 个答案:

没有答案