Spring Boot 2.2.5 получить параметры пост-запроса - PullRequest
1 голос
/ 27 марта 2020

Есть ли способ получить параметры тела запроса (JSON) без использования объекта POJO для каждого запроса? У меня есть два типа запросов, во многих из них я хочу получить параметр из запроса, например, что-то вроде этого:

{"name": "Mike", "Age":25}
request.getBodyParameter("name");

и для некоторых моих запросов я хочу преобразовать вход json в JAVA га sh карту.

Ответы [ 3 ]

1 голос
/ 27 марта 2020

Используйте JsonNode, чтобы взять динамический c объект;

Вот пример

   @PostMapping("/mapping")
    public String getDynamicData(@RequestBody JsonNode jsonNode) {
        String name = jsonNode.get("name").asText();
        return name;
    }
1 голос
/ 27 марта 2020

Если вы хотите преобразовать JSON в хэш-карту в controller, то решение подойдет ниже. ObjectConvetore reduce your performance. It's an extra conversion.

@ResponseStatus(HttpStatus.ACCEPTED)
@RequestMapping(value = "/hi", method = RequestMethod.POST, consumes = "application/json")
public void startMartExecution(@RequestBody(required = true) Map<String,String> martCriterias) {
        System.out.println(martCriterias.get("name"));
}

Если вы позвоните restAPI from your application, то код ниже будет работать.

HttpHeaders headers = new HttpHeaders();
RestTemplate restTemplate = new RestTemplate();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.ALL));
HttpEntity<Void> entity = new HttpEntity<Void>(null, headers);
Map<String, Object> body = new HashMap<>();
ParameterizedTypeReference<Map<String, Object>> parameterizedTypeReference = new ParameterizedTypeReference<Map<String, Object>>() {};
ResponseEntity<Map<String, Object>> result = restTemplate.exchange(URL, HttpMethod.GET, entity, parameterizedTypeReference);
body = result.getBody();

Спасибо

1 голос
/ 27 марта 2020
@RequestMapping(value = "/foo", method = RequestMethod.POST, consumes = "application/json")
public Status getJsonData(@RequestBody JsonObject jsonData){
}

из jsonData вы можете сделать jsonData.getString("name") или вы можете преобразовать это в карту

HashMap<String,Object> result =
        new ObjectMapper().readValue(jsonData, HashMap.class);

Обновление

 public Status getJsonData(@RequestBody JsonNode jsonNode){
   String name = jsonNode.get("name").asText();
}

Для преобразования на карту

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> result = mapper.convertValue(jsonNode, new TypeReference<Map<String, Object>>(){});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...