在没有适当字段的情况下用杰克逊反序列化JSON

yan*_*ann 6 java json jackson

我有这个JSON:{"成功":false}

我想将其反序列化为此POJO:

class Message {
    private Map<String, String> dataset = new HashMap<String, String>();

    @JsonProperty("success")
    public boolean isSuccess() {
        return Boolean.valueOf(dataset.get("success"));
    }

    @JsonProperty("success")
    public void setSuccess(boolean success) {
        dataset.put("success", String.valueOf(success));
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以将此JSON反序列化为一个没有字段成功的类?到目前为止,我总是得到"UnrecognizedPropertyException:Unrecognized field"成功""

谢谢你的帮助!

Fra*_*eth 6

您可以实现一个方法并使用以下方法对其进行注释@JsonAnySetter:

@JsonAnySetter
public void handleUnknownProperties(String key, Object value) {
    // this will be invoked when property isn't known
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是将此失败转为:

objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Run Code Online (Sandbox Code Playgroud)

这可以让你反序列化你的JSON而不会在找不到属性时失败.

测试


public static class Message {
    private final Map<String, String> dataset = new HashMap<String, String>();

    @Override
    public String toString() {
        return "Message [dataset=" + dataset + "]";
    }

}

@Test
public void testJackson() throws JsonParseException, JsonMappingException, IOException {
    String json = "{\"success\":false}";
    ObjectMapper om = new ObjectMapper().configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    System.out.println(om.readValue(json, Message.class));
}
Run Code Online (Sandbox Code Playgroud)