0

次のクラスがあり、すべての getter-setter メソッドがあります。

public class Employee {

    @JsonProperty("FirstName")
    private String FirstName;

    @JsonProperty("LastName")
    private String LastName;

    @JsonProperty("MiddleName")
    private String MiddleName;

    @JsonProperty("Address")
    private String Address;

    public String getMiddleName() {
        return MiddleName;
    }

    public void setMiddleName(String middleName) {
        MiddleName = middleName;
    }

    public String getLastName() {
        return LastName;
    }

    public void setLastName(String lastName) {
        LastName = lastName;
    }

    public String getFirstName() {
        return FirstName;
    }

    public void setFirstName(String firstName) {
        FirstName = firstName;
    }

    public String getAddress() {
        return Address;
    }

    public void setAddress(String address) {
        Address = address;
    }

}

また、以下の JSON 文字列があります。

String jsonString = "{\"employee\": {\"FirstName\": \"FirstName++bb####**\",\"LastName\": \"LastName++bb####\",\"MiddleName\": \"MiddleName++bb####\",\"Address\": \"Address++bb####\"}}"

jackson API を使用して、json 文字列を Java オブジェクトに変換しています。これが私のコードです

ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonString, Employee.new);

ここで、JSON 文字列を Java オブジェクトにマッピングするときにフィルタを追加して、すべてのフィールドから特殊文字を削除する必要があります。

セッターメソッドを更新することで実現できます。元。

public void setAddress(String address) {
        Address = address.replaceAll("[-+.^:,#,*,(,)]","");
    }

Jackson APIにフィルターを追加するより良い方法、またはセッターメソッドを更新せずにこれを達成する他の方法はありますか?

4

3 に答える 3

0

3つのステップでそれを行うことができます。

  1. 文字列をJsonNode' (JsonNode に解析 jsonNode = mapper.readTree(jsonString);`)
  2. 属性を反復処理して値を修正します。
Iterator<String> elements = ((ObjectNode) jsonNode).fieldNames();
        while (elements.hasNext()){
            String name = elements.next();
            String oldText = jsonNode.get(name).asText();
            String newText = transform(oldText);
            ((ObjectNode) jsonNode).set(name, new TextNode(newText));
        }
  1. 最後に DTO に変換します ( mapper.convertValue(jsonNode, Employee.class);)
于 2021-04-08T15:57:05.870 に答える