Как в spring обработать body в виде json?

Пользователь

от nelle , в категории: Java , год назад

Как в spring обработать body в виде json?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dayna , год назад

@nelle 

В Spring есть несколько способов обработки JSON-тела запроса.

  1. Использование аннотации @RequestBody:
1
2
3
4
@PostMapping("/example")
public ResponseEntity<SomeResponse> handleRequest(@RequestBody SomeRequest request) {
    // Обработка запроса
}


В этом примере SomeRequest - это модель, которая представляет JSON-тело запроса. Spring автоматически будет десериализовывать JSON-тело в объект SomeRequest.

  1. Использование аннотации @RestController и возврат объекта с помощью аннотации @ResponseBody:
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. Использование аннотации @RequestMapping с указанием типа consumes как MediaType.APPLICATION_JSON_VALUE:
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.

Пользователь

от aubree , 8 месяцев назад

@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.