스택큐힙리스트

Spring MVC @ResponseBody 메서드에서 문자열을 반환하는 방식으로 HTTP 400 오류로 응답하는 방법 본문

카테고리 없음

Spring MVC @ResponseBody 메서드에서 문자열을 반환하는 방식으로 HTTP 400 오류로 응답하는 방법

스택큐힙리스트 2023. 10. 27. 12:44
반응형

간단한 JSON API용으로 Spring MVC를 사용하고 있으며, 다음과 같은 @ResponseBody 기반 접근 방식을 사용하고 있습니다. (이미 JSON을 직접 생성하는 서비스 계층이 있습니다.)


@RequestMapping(value = /matches/{matchId}, produces = application/json)
@ResponseBody
public String match(@PathVariable String matchId) {
String json = matchService.getMatchJson(matchId);
if (json == null) {
// TODO: 어떻게 예를 들어 400 잘못된 요청으로 응답해야 할까요?
}
return json;
}

주어진 시나리오에서 HTTP 400 오류로 응답하는 가장 간단하고 깨끗한 방법은 무엇인가요?


저는 다음과 같은 방법들을 찾아보았지만:


return new ResponseEntity(HttpStatus.BAD_REQUEST);

...하지만 여기에서는 메서드의 반환 형식이 String이기 때문에 사용할 수 없습니다.

답변 1

리턴 타입을 ResponseEntity<>로 변경한 다음 400에 대해서 아래와 같이 사용할 수 있습니다:


return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

그리고 올바른 요청에 대해서:


return new ResponseEntity<>(json,HttpStatus.OK);

Spring 4.1 이후에는 ResponseEntity에서 도움이 되는 메소드가 있습니다. 아래와 같이 사용할 수 있습니다:


return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);

그리고


return ResponseEntity.ok(json);

답변 2

HTTP 400 에러는 클라이언트의 요청이 부적절하거나 서버가 요청을 처리할 수 없는 경우에 발생합니다. Spring MVC에서 @ResponseBody 어노테이션을 사용하여 String 값을 반환하는 메서드에서 HTTP 400 에러를 어떻게 응답할 수 있는지 알아보겠습니다.
Spring MVC에서는 @Controller 어노테이션이 적용된 클래스의 메서드에 @RequestMapping 어노테이션을 사용하여 요청을 매핑합니다. 이때, @ResponseBody 어노테이션을 함께 사용하면 메서드의 반환 값이 HTTP 응답의 본문(body)으로 전송됩니다.
HTTP 400 에러를 응답하기 위해서는 메서드의 반환 타입을 ResponseEntity로 지정하고, ResponseEntity에 HTTP 상태 코드를 설정하여 응답합니다. 일반적으로 @ExceptionHandler 어노테이션과 함께 사용하여 예외 처리 메서드를 작성하면 됩니다.
아래의 예제를 통해 HTTP 400 에러를 응답하는 방법을 살펴보겠습니다. 이 예제는 Spring MVC의 @Controller 어노테이션이 적용된 클래스에서 @ExceptionHandler 어노테이션을 사용하여 메서드에서 발생한 예외를 처리하고, ResponseEntity를 반환하는 방식으로 HTTP 400 에러를 응답하는 방법을 보여줍니다.
```java
@Controller
public class MyController {
@RequestMapping(value = /api/myendpoint, method = RequestMethod.POST)
@ResponseBody
public ResponseEntity myEndpoint(@RequestBody String requestPayload) {
// 요청을 처리하는 로직
if (isValidRequest(requestPayload)) {
// 요청이 유효한 경우
return ResponseEntity.ok(Request processed successfully.);
} else {
// 요청이 유효하지 않은 경우
return ResponseEntity.badRequest().body(Invalid request.);
}
}
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity handleIllegalArgumentException(IllegalArgumentException ex) {
// 예외 처리 로직
return ResponseEntity.badRequest().body(Invalid request.);
}
private boolean isValidRequest(String requestPayload) {
// 요청 유효성을 검사하는 로직
// 유효한 요청인 경우 true를 반환하고, 그렇지 않은 경우 false를 반환한다.
}
}
```
위의 예제에서는 /api/myendpoint에 POST 요청이 들어오면 myEndpoint 메서드가 호출됩니다. 이 메서드에서는 요청을 처리하고, 요청이 유효한지 검사한 뒤, ResponseEntity.ok() 또는 ResponseEntity.badRequest()를 사용하여 HTTP 200 또는 HTTP 400 응답을 반환합니다.
만약 요청이 유효하지 않는 경우에는 IllegalArgumentException이 발생할 수 있습니다. 이러한 경우 @ExceptionHandler 어노테이션이 적용된 handleIllegalArgumentException 메서드에서 예외를 처리하고, ResponseEntity.badRequest()를 사용하여 HTTP 400 에러를 응답합니다.
위 예제를 통해 Spring MVC에서 @ResponseBody 어노테이션을 사용하여 String 값을 반환하는 메서드에서 HTTP 400 에러를 응답하는 방법을 살펴보았습니다. 이를 참고하여 웹 어플리케이션 개발 시 필요한 경우 HTTP 에러 코드를 응답하는 메서드를 작성하실 수 있습니다.

반응형
Comments