Служба отдыха: не может получить целые данные из @Comsumes () (от javax. ws. rs.Comsumes) - PullRequest
0 голосов
/ 25 августа 2018

У меня есть служба отдыха Java, и запрос, который вызывает службу REST, содержит объект JSON.

Я обнаружил, что sub_array_1 и sub_array_2 были пустыми списками, но другие члены класса имеют свои значения в receviedObj.

Разве @Consumes () не может анализировать более одного уровня объекта json? Как я могу получить правильные данные в sub_array_1 и sub_array_2?

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 объект любит:

{
  "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-класс:

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;
            }

        }
}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Наконец, я все еще не могу понять, почему JSX-RS не может правильно преобразовать JSON в класс java.

Я использую Gson, чтобы выполнить преобразование и получить объект с правильными данными.

0 голосов
/ 26 августа 2018

Я не думаю, что JSON, который вы отправляете, подходит для ClassA, так как в нем есть некоторые параметры, которых нет в ClassA.Такие параметры, как item_1, item_2 и т. Д. Согласно моему тесту, следующий JSON должен заполнить ClassA отлично.

{
  "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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...