我需要从用户输入中替换或删除一些字符
是否可以在设置后为变更值声明注释?
例如,我有UserDTO类和用户名字段。我想更改Unicode字符。
请注意我使用的是Spring Data + Web Service
@PostMapping("/register")
public RestResult register(@Valid @RequestBody UserDTO userDTO){
...
}
答案 0 :(得分:1)
这有两种方法。
您可以为username对象编写setter来处理此逻辑。需要注意的是,通过你的setter传递的任何用户名值都将通过你的String按摩。
public class UserDTO implements Serializable {
@JsonProperty("username")
private String username;
public void setUsername(String username) {
this.username = username.replace("A", "B");
}
public String getUsername() {
return this.username;
}
}
另一种可能的方法是使用Jackson
提供的@JsonCreator
注释。
您需要记住,这将成为使用UserDTO
对象跨所有对象的反序列化策略。但考虑到你想要换掉unicode(最有可能是内部可读格式),我想这会适合你的用例。
public class UserDTO implements Serializable {
private String username;
@JsonCreator
public UserDTO(@JsonProperty("username") String username) {
this.username = username.replace("A", "B");
}
public String getUsername() {
return this.username;
}
}
因此,当传入您的方法时,“ABC”将解析为“BBC”。这可能是您的首选方法,因为它可以让您灵活地在需要时调整对象,而无需通过用户名字符串清理。由序列化和构造函数创建的对象将完成清理,但是setter将按原样获取值。在getter和setter中很容易得到逻辑。