首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rest服务:无法从@Comsumes() (由javax.​ws.​rs.Comsumes )获取完整数据

rest服务:无法从@Comsumes() (由javax.​ws.​rs.Comsumes )获取完整数据
EN

Stack Overflow用户
提问于 2018-08-26 04:33:04
回答 2查看 71关注 0票数 0

我有一个由Java提供的rest服务,调用该REST服务的请求包含一个JSON对象。

我发现sub_array_1和sub_array_2是空列表,但其他类成员在receviedObj中有自己的值。

@Consumes()不能解析超过1级的json对象吗?如何在sub_array_1和sub_array_2中获得正确的数据?

代码语言:javascript
复制
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/* ... */

@POST
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response sendRequest(ClassB receviedObj) {
    /*  ...  */
}

json对象喜欢:

代码语言:javascript
复制
{
  "item_1": "value_1",
  "item_2": "value_2",
  "item_3": "value_3",
  "otherItems": [
      {
          "subitem_1": "subvalue_1",
          "subObject": {
            "name": "aaabbb",
            "sub_array_1": [
                {
                    "data_1": "d11",
                    "data_2": "d12",
                    "data_3": "d13"
                },
                {
                    "data_1": "d21",
                    "data_2": "d22",
                    "data_3": "d23"
                }
            ],
            "sub_array_2": [
                {
                    "tag_1": "v1",
                    "tag_2": "v2",
                    "tag_3": "v3",
                    "tag_4": "v4"
                }
            ]
        }
    }
  ]
}

java类:

代码语言:javascript
复制
public class ClassB {
    public String item_1;
    public String item_2;
    public String item_3;
    public List<otherItems> otherItems;
}    

public class otherItems{
    public String subitem_1;
    public subObject subObject;

    public otherItems(){
        this.subitem_1 = "";
        this.subObject = new subObject();
    }

    // ================================
    public static class subObject{
        public String name;
        public List<sub_array_1>  sub_array_1;
        public List<sub_array_2>  sub_array_2;

        public subObject(){
            this.name= "";
            this.sub_array_1 = new ArrayList<sub_array_1>();
            this.sub_array_2 = new ArrayList<sub_array_2>();
        }
    }

    // =========================================
        public static class sub_array_1 {
            public String data_1;            
            public String data_2;
            public String data_3;

            public String getdata_1() {
                return data_1;
            }

            public String getdata_2() {
                return data_2;
            }

            public String getdata_3() {
                return data_3;
            }
        }
        public static class sub_array_2 {
            public String tag_1;
            public String tag_2;
            public String tag_3;
            public String tag_4;

            public String gettag_1() {
                return tag_1;
            }

            public String gettag_2() {
                return tag_1;
            }

            public String gettag_3() {
                return tag_1;
            }

            public String gettag_4() {
                return tag_1;
            }

        }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-27 17:29:13

最后,我仍然不明白为什么JSX-RS不能正确地将JSON转换为java类。

我使用Gson进行转换,并获得具有正确数据的对象。

票数 0
EN

Stack Overflow用户

发布于 2018-08-26 06:34:23

我不认为你发送的JSON适合ClassA,因为它有一些在ClassA中不存在的参数。参数,如item_1,item_2等。根据我的测试,遵循JSON应该可以很好地填充ClassA

代码语言:javascript
复制
{
  "subitem_1": "subvalue_1",
  "subObject": {
    "name": "aaabbb",
    "sub_array_1": [
      {
        "data_1": "d11",
        "data_2": "d12",
        "data_3": "d13"
      },
      {
        "data_1": "d21",
        "data_2": "d22",
        "data_3": "d23"
      }
    ],
    "sub_array_2": [
      {
        "tag_1": "v1",
        "tag_2": "v1",
        "tag_3": "v1",
        "tag_4": "v1"
      }
    ]
  }
}

因此,要么需要更改ClassA以合并其他字段,要么需要使用上面的JSON。此外,我还建议阅读一些关于Java的编码实践和命名约定的文章

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52021028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档