【问题标题】:how to accept a List<List<String>> from json in rest web services如何在其他 Web 服务中接受来自 json 的 List<List<String>>
【发布时间】:2017-06-08 08:10:34
【问题描述】:

我有 json 输入为

{"subkeys":[{"1","2", "3"},{"4","5","6"},{"7","8","9"}]

我需要将其设为 List &lt; List &lt; String &gt; &gt;List &lt; String[] &gt;

@PUT
@Path("/{key}/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public MyResponse loadData( List<List<String>> subkeys) {

}

我得到了类似的错误

原因:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:2 个 IllegalAnnotationExceptions 计数 java.util.List 是一个接口,JAXB 不能处理接口。 此问题与以下位置有关: 在 java.util.List 在私有 java.util.List foobar.alkohol.register.webservice.jaxws.GetRelationsFromPersonResponse._return

【问题讨论】:

  • 它不是一个有效的 JSON
  • 如错误所说,java.util.List is an interface, and JAXB can't handle interfaces

标签: json web-services jersey


【解决方案1】:

我在这里看到的问题是由于 JSON 输入的格式错误,在您的情况下正确的 JSON 是:

{
  "data" :[
  {
  "keys": ["123","456","789"],

  "subkeys": [
      ["1", "2", "3"],
      ["1", "2", "3"],
      ["1", "2", "3"]
   ]
  }
  ]
}

试试这个并告诉我们。

我的代码如下

@PUT @Path("/{key}/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public MyResponse loadData( MonitoringDataRequest monReq) {  
}

@XmlRootElement(name="data")
public class MonitoringDataRequest {
    private List<MonitoringData> data;

    @XmlElement
    public void setData(List<MonitoringData> data) {
        this.data = data;
    }


    public List<MonitoringData> getData() {
        return data;
    }




}

@XmlRootElement(name="monitoring_data")
public class MonitoringData {

    private List<String> keys;
    private List<SubkeyData> subKeys;

    @XmlElement
    public void setKeys(List<String> keys) {
        this.keys = keys;
    }


    public List<String> getKeys() {
        return keys;
    }


    @XmlElement(name="subkeys")
    public void setSubKeys(List<SubkeyData> subKeys) {
         this.subKeys = subKeys;
    }


    public List<SubkeyData> getSubKeys() {
         return subKeys;
    }

}

@XmlRootElement(name="subkeys")
//@XmlAccessorType(XmlAccessType.NONE)
public class SubkeyData 
{

    private List<String[]> subkeys;


    @XmlElement
    public void setSubkeys(List<String[]> subkeys)
    {
        this.subkeys = subkeys;
    }


    public List<String[]> getSubkeys()
    {
        return subkeys;
    }

}

【讨论】:

  • 你可以尝试一下
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2022-01-05
  • 2013-03-30
  • 2013-01-02
相关资源
最近更新 更多