【问题标题】:POST JSON with JSON attribute to java API rest将带有 JSON 属性的 JSON POST 到 java API 休息
【发布时间】:2017-04-26 12:07:03
【问题描述】:

我有一个接受 JSON 作为正文请求的 java API(rest)。 我需要将 body 映射到一个 java 类,但是其中一个 JSON 属性是 JSON 本身,我无法预测它的结构。

例如,这是资源:

@POST
public void paymentInfo(PaymentInfoEntity paymentInfoEntity)
throws JsonGenerationException, JsonMappingException, IOException {
   ...
}

这是一个 JSON 示例:

{
   progressive: 123,
   params: { [another valid JSON node] }
}

这就是我想要的实体:

public class PaymentInfoEntity {
    public Integer progressive;
    public JsonNode params;
}

使用这个配置,我有这个错误:

org.codehaus.jackson.map.JsonMappingException: 无法构造 com.fasterxml.jackson.databind.JsonNode 的实例,问题:抽象 类型只能用额外的类型信息来实例化

如果我声明 BaseJsonNode params 而不是 JsonNode params,则会出现同样的错误。

如果我改为声明Object params,它会起作用。 然后我如何从中解析 JSON?在这种情况下,params.toString(){key1=stringvalue1, key2=stringvalue2} 而不是 {key1: "stringvalue1", key2: "stringvalue2"}

实现我的目标的最佳选择是什么? 谢谢!

【问题讨论】:

    标签: java json rest post jackson


    【解决方案1】:

    JsonNode 是一种抽象类型。尝试使用 BaseJsonNode 或 java.util.Map

    【讨论】:

    • 正如我所写,我也尝试了 BaseJsonNode,结果相同。 Map 似乎有效,谢谢。然后我使用 new ObjectMapper().writeValueAsString(paymentInfoEntity.getParams()) 得到一个 JSON 对象。
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 2018-07-26
    • 2015-12-01
    • 2016-05-10
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多