当前位置: 首页 > 知识库问答 >
问题:

[Spring]:请求映射嵌套的Json,里面有数组

澹台承载
2023-03-14

我有一个requestbody作为,

 {
    "first": "0",
    "second": "3",
    "third": {
        "Types": ["AAA"],
        "Name": "XXXX"
    }
 }

我无法使用spring将此映射到请求映射。我试过用下面的,但没有用。

公共类请求映射{

private Integer skip;
private Integer take;
private Map<String, String[]> keywords;

public Integer getSkip() {
    return skip;
}

public void setSkip(Integer skip) {
    this.skip = skip;
}

public Integer getTake() {
    return take;
}

public void setTake(Integer take) {
    this.take = take;
}

public Map<String, String[]> getKeywords() {
    return keywords;
}

public void setKeywords(Keywords keywords) {
    this.keywords = (Map<String, String[]>) keywords;
}

}

如何映射请求正文?

编辑Json中的大小写敏感键。

共有2个答案

梁丘凯定
2023-03-14

在映射中将String[]更改为Object,因为关键字可以有一个数组或一个String而不是只有数组,例如name对有一个String值(并且不能映射为数组)并且类型有一个数组值。所以它会是:

 private Map<String, Object> keywords;

否则,最好的选择是创建一个对象,使用json属性进行注释,因此您的属性以大写开头:

 class Keywords {
      @JsonProperty("Types")
      List<String> types;
      @JsonProperty("Name")
      String name;
   }

然后用它代替地图。

如果您能够更改json,您的关键字对值可以是一个数组:

"keywords": {
    "types": ["P-A01"],
    "name": ["XXXX"]
}

然后,您将能够像您的示例一样使用关键字地图:

 Map<String, String[]> keywords;

当然,您应该知道keyname将有一个第1个数组。

邴子实
2023-03-14

这应该是正确的型号。

public class jsonObject
{
    private Keywords keywords;

    private String take;

    private String skip;

    public Keywords getKeywords ()
    {
        return keywords;
    }

    public void setKeywords (Keywords keywords)
    {
        this.keywords = keywords;
    }

    public String getTake ()
    {
        return take;
    }

    public void setTake (String take)
    {
        this.take = take;
    }

    public String getSkip ()
    {
        return skip;
    }

    public void setSkip (String skip)
    {
        this.skip = skip;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [keywords = "+keywords+", take = "+take+", skip = "+skip+"]";
    }
}

//keywords class

public class Keywords
{
    private String name;

    private String[] types;

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    public String[] getTypes ()
    {
        return types;
    }

    public void setTypes (String[] types)
    {
        this.types = types;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [name = "+name+", types = "+types+"]";
    }
}
 类似资料:
  • 我正在构建一个RESTAPI,它接受用户以以下JSON格式输入的内容。细节是嵌套的JSON对象,其键值是动态的,其关联的数据类型也是动态的。如下图所示,颜色是字符串列表,ram是整数列表,值可以是字符串、布尔值和整数类型。考虑到具体情况,如何构建请求POJO类将请求JSON转换为请求对象在键、值及其数据类型方面是动态的。在下面的JSON中,细节可以有0。。n键值,其值数据类型可以是字符串列表、整数

  • 我试图动态解析一些JSON到一个Map 但是当我尝试使用一些更复杂的JSON和嵌套信息时失败了。我试图从json解析示例数据。组织 我得到以下错误 异常在线程"main"com.fasterxml.jackson.databind.JsonMapping异常:不能反序列化实例的java.lang.字符串START_OBJECT令牌 有没有办法将复杂的JSON数据解析成映射?

  • 我用的是Protobuf 3。从文档来看,似乎无法定义嵌套贴图: 我正在尝试创建一种消息类型来表示期权链的定价信息(出价和要价)。对于那些不熟悉这些金融工具的人,基本上我有一套“到期日期(YYYYMMDD)”。在每个过期日期中,我都有一组“strikes(float number;如果需要,可以用字符串表示,我同意)”。在每次行使中,我有两个期权,一个“看跌”和一个“看涨”(这被称为期权的“右”)

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。

  • 很抱歉再次问这种问题,但我无法通过查看其他线程和Spring doc来解决我的问题。 我正在使用maven的3.1.0.RELEASE,并尝试使用注释和java配置。 以下是我的web.xml: 这是我的档案web-application-config.xml. 我有两个类。第一个配置视图解析器 第二个定义我的控制器: 根据我的配置,我想一切都应该指向我的home()函数。然而,事实并非如此,以下