【发布时间】:2021-11-18 15:41:56
【问题描述】:
在 Spring Boot 中给定一个 POJO,其中包含数十个 String 类型的字段,这些字段由 Jackson 反序列化。出于演示目的,以下示例仅包含三个字段:
@NoArgsConstructor
public class SomeRequest {
@JsonProperty("field_1")
private String field1;
@JsonProperty("field_2")
private String field2;
@JsonProperty("field_3")
private String field3;
}
我正在寻找一种方法来覆盖 setter 方法,但仅限于某些字段,即我想避免为每个受影响的字段重复以下代码。这对于少数几个领域是可行的,但对于少数几个领域来说会变得乏味。
public setField2(String field2) {
this.field2 = field2 + "?";
}
我的想法是在字段上放置这样的注释:
@NoArgsConstructor
public class SomeRequest {
// ...
@JsonProperty("field_2")
@AppendQuestionMark
private String field2;
// ...
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AppendQuestionMark {
}
但我缺乏有关如何“实施”AppendQuestionMark 注释的信息,该注释将覆盖字段的 setter 方法。
还是我想的太复杂了?
【问题讨论】:
-
如果在 getter 方法中完成,它是否也可以满足您的用例的目的?
-
是的,如果它使事情变得更容易,那也可以达到目的????
-
当我看到问题时我的想法是创建一个自定义反序列化程序并在您需要的字段上使用
@JsonDeserialize注释而不是自定义注释,您可以在您的项目中使用它们吗?
标签: java spring-boot jackson