代码之家  ›  专栏  ›  技术社区  ›  Yevhenii S.

如何将一些JSON参数反序列化为DTO中的一个新变量

  •  0
  • Yevhenii S.  · 技术社区  · 8 年前

    如果应该使用一些JSON参数来创建Java DTO变量(但不能反序列化为DTO变量),那么如何将JSON(使用Jackson)反序列化为Java对象。

    例如,我有 JSON {"sideA" : 2, "sideB" : 4, "useless_parameter" : "useless_information"} 我需要得到toString(反序列化Java对象)的结果,如下所示: RectangleDto{area = 8, useless_parameter = "useless_information"}

    如果我需要反序列化“无用的\u参数”,那么我可以使用@JsonGetter(“无用的\u信息”),那么如果我需要将面积作为矩形to的变量,我应该如何处理“sideA”和“sideB”?我已经有了一个将JSON参数转换为这个变量的方法。

    2 回复  |  直到 8 年前
        1
  •  0
  •   yvoytovych    8 年前

    您可能需要自定义反序列化器:

    class MyDeserializer extends StdDeserializer<RectangleDto> {
    
        public MyDeserializer() {
            this(null);
        }
    
        protected MyDeserializer(Class<?> vc) {
            super(vc);
        }
    
        @Override
        public RectangleDto deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            JsonNode node = jp.getCodec().readTree(jp);
            int a = node.get("sideA").intValue();
            int b = node.get("sideB").intValue();
            String useless_parameter = node.get("useless_parameter").asText();
    
            RectangleDto test = new RectangleDto();
            test.setArea(a * b);
            test.setUseless_parameter(useless_parameter);
    
            return test;
        }
    }
    

    然后在类上注册反序列化器

    @JsonDeserialize(using = MyDeserializer.class)
    public class RectangleDto {
    
        private int area;
        private String useless_parameter;
        // getters, setters...
    }
    

    然后,这将按照您的需要工作:

    RectangleDto r = mapper.readValue("{\"sideA\" : 2, \"sideB\" : 4, \"useless_parameter\" : \"useless_information\"}", RectangleDto.class);
    System.out.println(r);
    

    结果在

    RectangleDto{area=8, useless_parameter='useless_information'}
    
        2
  •  0
  •   JPRLCol    8 年前

    您可以添加 @JsonProperty 适用于该区域,也可使用 @JsonIgnore 对于sideA和SideB。请检查 Jackson :: adding extra fields to an object in serialization