【问题标题】:How to accept an arbitary JSON object?如何接受任意 JSON 对象?
【发布时间】:2021-07-15 19:45:13
【问题描述】:

我有一个接受 JSON 的 Jax-rs 端点,类似于:

{
"a": 1,
"b": "some value",
"c": { <-some-arbitary-json-object-> }
}

在我的 DTO 中,a 和 b 没有问题。我用 c 做什么?我只需要再次序列化它(或者,实际上,只是将它作为字符串读取),我不需要以任何方式处理它。我确实需要用 a 和 b 做事情,所以我不能把整个身体都当作一个字符串。

我需要给它什么数据类型以便 jax-rs/jersey 可以反序列化它?

我不禁觉得我错过了一些明显的东西。

【问题讨论】:

    标签: jax-rs jersey-2.0


    【解决方案1】:

    我想出了一种方法,但我觉得我可能是在重新发明轮子。我定义了一个自定义反序列化器来读取任意 JSON,然后再次对其进行序列化:

    public class JsonAsStringDeserializer extends JsonDeserializer<String> {
        private final ObjectMapper mapper = new ObjectMapper();
      @Override
      public String deserialize(JsonParser p, DeserializationContext ctx)
              throws IOException {
         TreeNode node = mapper.readTree(p);
         return mapper.writeValueAsString(node);
          
      }
    }
    

    在模型 POJO 中:

    @JsonDeserialize(using = JsonAsStringDeserializer.class) 
    private String c = null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多