Чтение содержимого тела запроса POST в Java (с использованием REST) - PullRequest
0 голосов
/ 01 апреля 2019

Предположим, я делаю POST-запрос, используя POSTMAN, и получаю тело в формате json.Я хочу прочитать содержимое тела и передать его в метод.Как это сделать ?

Я вижу, что для чтения параметров используются аннотации @QueryParam, @PathParam, @HeaderParam и т. Д.Я не понимаю, как читать тело.

говорят, что тело
{ "param1":"value1", "param2":"value2", "param3":"value3", }

JavaSide-код ServerSide:

@POST

@Path("/myresource")

public Response addParams( String param1, String param2, String param3) { do somthing. }

Поэтому я хотел, чтобы значения param1, param2, parmam3 читались из requestbody.Возможно ли это?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Определите класс как:

public class Foo {

    String param1;
    String param2;
    String param3;

    // Default constructor, getters and setters
}

Затем используйте его следующим образом:

@POST
@Path("/myresource")
@Consumes(MediaType.APPLICATION_JSON)
public Response addParams(Foo params) {

    String param1 = params.getParam1();
    String param2 = params.getParam2();
    String param3 = params.getParam3();

    ...
}

В качестве альтернативы используйте Map<String, String>:

@POST
@Path("/myresource")
@Consumes(MediaType.APPLICATION_JSON)
public Response addParams(Map<String, String> params) {

    String param1 = params.get("param1");
    String param2 = params.get("param2");
    String param3 = params.get("param3");

    ...
}

Просто убедитесь, что в вашем приложении настроен парсер JSON, например, Jackson или MOXy.

0 голосов
/ 01 апреля 2019

Не знаю, какой фреймворк Java вы используете, но вы можете объявить параметр @RequestBody в своем методе и «сопоставить» его с POJO, который будет соответствовать входящему JSON (точно так же, как @Smutje сказал в комментарии).

Например, весной мы делаем это так,

@PostMapping(value = "/example",
            consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 public ResponseEntity postExample(@RequestBody ExamplePOJO examplePOJO) {

 // Do something
}
...