복붙노트

[SPRING] Spring MVC에서 HTTP 상태 코드로 응답하는 방법 @RestController @ResponseBody 클래스가 객체를 반환합니까?

SPRING

Spring MVC에서 HTTP 상태 코드로 응답하는 방법 @RestController @ResponseBody 클래스가 객체를 반환합니까?

@StartVariable이 적절한 상태 코드와 함께 JSON 형식의 특정 객체를 반환하는 @RestController를 갖기 위해 노력하고 있습니다. 지금까지 코드는 JSON 형식의 객체를 반환합니다. 기본적으로 스프링 4가 내장 된 Jackson 라이브러리를 사용하기 때문입니다.

그러나 나는 그것을 만드는 방법을 모르므로 사용자에게 우리가 API 변수, JSON 데이터, 오류 코드 (또는 모두 성공하면 성공 코드)를 원한다는 메시지를 보냅니다. 예제 출력은 다음과 같습니다.

매개 변수가있는 URL은 다음과 같습니다.

http://localhost:8080/gotech/api/v1/api/3000105000

지금까지 가지고있는 코드 :

@RestController
@RequestMapping(value = "/api/v1")
public class ClientFetchWellDataController {

    @Autowired
    private OngardWellService ongardWellService;

    @RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
    @ResponseBody
    public OngardWell fetchWellData(@PathVariable String apiValue){
        try{
            OngardWell ongardWell = new OngardWell();
            ongardWell = ongardWellService.fetchOneByApi(apiValue);

            return ongardWell;
        }catch(Exception ex){
            String errorMessage;
            errorMessage = ex + " <== error";
            return null;
        }
    }
}

해결법

  1. ==============================

    1.@RestController는 이에 적합하지 않습니다. 다른 유형의 응답을 반환해야하는 경우 상태 코드를 명시 적으로 설정할 수있는 ResponseEntity 를 사용하십시오.

    @RestController는 이에 적합하지 않습니다. 다른 유형의 응답을 반환해야하는 경우 상태 코드를 명시 적으로 설정할 수있는 ResponseEntity 를 사용하십시오.

    ResponseEntity의 본문은 모든 @ResponseBody 주석이있는 메서드의 반환 값과 같은 방식으로 처리됩니다.

    @RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
    public ResponseEntity<?> fetchWellData(@PathVariable String apiValue){
        try{
            OngardWell ongardWell = new OngardWell();
            ongardWell = ongardWellService.fetchOneByApi(apiValue);
    
            return new ResponseEntity<>(ongardWell, HttpStatus.OK);
        }catch(Exception ex){
            String errorMessage;
            errorMessage = ex + " <== error";
            return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST);
        }
    }
    

    @RestController 주석이있는 클래스에서 @RequestMapping 메서드에 @ResponseBody가 필요하지 않습니다.

  2. ==============================

    2.관용적 인 방법은 일반적인 요청 처리 방법에서 예외를 잡는 대신 예외 처리기를 사용하는 것입니다. 예외 유형에 따라 응답 코드가 결정됩니다. (보안 오류 403, 예기치 않은 플랫폼 예외 500, 원하는대로)

    관용적 인 방법은 일반적인 요청 처리 방법에서 예외를 잡는 대신 예외 처리기를 사용하는 것입니다. 예외 유형에 따라 응답 코드가 결정됩니다. (보안 오류 403, 예기치 않은 플랫폼 예외 500, 원하는대로)

    @ExceptionHandler(MyApplicationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleAppException(MyApplicationException ex) {
      return ex.getMessage();
    }
    
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String handleAppException(Exception ex) {
      return ex.getMessage();
    }
    
  3. from https://stackoverflow.com/questions/26134331/how-to-respond-with-http-status-code-in-a-spring-mvc-restcontroller-responsebo by cc-by-sa and MIT license