通过Java Spring Annotation替换String

时间:2017-10-14 18:02:55

标签: java spring spring-mvc annotations

我需要从用户输入中替换或删除一些字符

是否可以在设置后为变更值声明注释?

例如,我有UserDTO类和用户名字段。我想更改Unicode字符。

请注意我使用的是Spring Data + Web Service

@PostMapping("/register")
public RestResult register(@Valid @RequestBody UserDTO userDTO){
  ...
}

1 个答案:

答案 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中很容易得到逻辑。