Возможно ли принять объекты JSON в теле запроса POST, не имея методов getter и setter? - PullRequest
1 голос
/ 22 октября 2019

Мне нужно принять данные JSON в теле запроса POST. Можно ли принять все входные данные JSON, которые присутствуют в теле метода POST, без определения методов получения и установки для всех ключей в объектах JSON?

@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public postData GiveData(final postData output) {
    return output;
}

Мои методы Get и Set ::

public class TestClass {

   @JsonProperty("Type")
    public String getType() {
            return Type;
    }

    public void setType(String Type) {
            this.Type = Type;
    }
}

Если ввод JSON

{
  Type : "Test"
}

 Returns 200 :

Но Если ввод JSON

{
  "Type" : "Test" ,
  "Random-KeY" : "Value" 
} 

 Returns 400 : Unable to Process JSON data

Моя проблема в том, что мне нужно принимать данные, когда мы не можем ожидать входящие ключи JSON, поэтому я не могу написать методы get и set для всех ключей, так как я могу принять все объекты JSON в теле метода POST. Любое предложение может помочь мне?

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Поскольку у вас есть неизвестные ключ / значения в ваших данных json, я предлагаю использовать HashMap для requestbody, который будет обслуживать то, что вы хотите (т.е. не получать, получать и принимать неизвестные значения), например:

@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public postData GiveData(@RequestBody HashMap<String, Object> dataHashMap) {
       //access the values by their keynames. You know how to get keySet of hashMap and  
       // iterate over them(I guess)
        return output;
    }

Надеюсь, это сработает.

0 голосов
/ 22 октября 2019

Вы можете пометить свой класс как

@JsonIgnoreProperties(ignoreUnknown = true)

Это отобразит только существующие поля в классе и проигнорирует оставшиеся.

...