DEV Community

sunj
sunj

Posted on

Spring Boot @RestController, 2024-03-06

Java MVC 구조에서 Controller은 흐름을 제어하며, View를 반환하는 역할도 합니다. 하지만 Controller에서 View뿐만 아니라, Data(Json)를 반환해야 하는 경우도 있습니다. 그럴 때 @ResponseBody 어노테이션을 사용해 줍니다.

@Controller 
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping(value = "/users")
    public @ResponseBody ResponseEntity<User> findUser(@RequestParam("userName") String userName){
        return ResponseEntity.ok(userService.findUser(user));
    }

Enter fullscreen mode Exit fullscreen mode

@RestController는 @Controller에 @ResponseBody가 추가된 것으로 Json 형태로 데이터를 반환합니다.

@RestController
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping(value = "/users")
    public User findUser(@RequestParam("userName") String userName){
        return userService.findUser(user);
    }
Enter fullscreen mode Exit fullscreen mode

이러한 경우 클라이언트가 예상하는 HttpStatus를 설정이 불가능하기 때문에, 따로 설정이 필요합니다.

    @RequestMapping("/errorCode")
    public ResponseEntity<Void> errorCode(){

        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
Enter fullscreen mode Exit fullscreen mode

리스트와 함께 404 에러 코드를 같이 보낼 수도 있습니다.

return new ResponseEntity<>(slist, HttpStatus.NOT_FOUND);
Enter fullscreen mode Exit fullscreen mode

@RequiredArgsConstructor는 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해 줍니다.
새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야하는 번거로움을 없애줍니다. (@Autowired를 사용하지 않고 의존성 주입)

_참조: https://mangkyu.tistory.com/49

https://dreamcoding.tistory.com/83

https://dydals5678.tistory.com/2_

Top comments (0)