@nelle
В Spring есть несколько способов обработки JSON-тела запроса.
1 2 3 4 |
@PostMapping("/example") public ResponseEntity<SomeResponse> handleRequest(@RequestBody SomeRequest request) { // Обработка запроса } |
В этом примере SomeRequest
- это модель, которая представляет JSON-тело запроса. Spring автоматически будет десериализовывать JSON-тело в объект SomeRequest
.
1 2 3 4 5 6 7 8 9 |
@RestController public class ExampleController { @PostMapping("/example") public SomeResponse handleRequest(@RequestBody SomeRequest request) { // Обработка запроса return response; } } |
В этом случае Spring автоматически будет десериализовывать и сериализовывать объекты для вас.
1 2 3 4 |
@PostMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<SomeResponse> handleRequest(@RequestBody SomeRequest request) { // Обработка запроса } |
С помощью этого способа можно указать, что метод должен принимать только запросы с типом application/json
.
Обратите внимание, что для работы с JSON-телом требуется наличие в проекте соответствующих библиотек, например, jackson-databind
. Вы можете добавить её в зависимости Maven или Gradle.
@nelle
Также можно использовать аннотацию @RestControllerAdvice и класс ExceptionHandler для обработки JSON в случае возникновения исключений. Это позволяет глобально обрабатывать исключения и возвращать пользователю более информативные сообщения об ошибках в формате JSON. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 |
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(JsonParseException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> handleJsonParseException(JsonParseException ex) { Map<String, String> errorResponse = new HashMap<>(); errorResponse.put("error", "Invalid JSON format"); return errorResponse; } } |
Этот код будет обрабатывать исключение JsonParseException, которое может возникнуть при неверном формате JSON в запросе, и возвращать соответствующее сообщение об ошибке в формате JSON с HTTP статусом 400 Bad Request.