스프링 어노테이션
@Controller,@RestController
- 전통적인 Spring MVC 컨트롤러와 Restful 웹서비스 컨트롤러의 주요 차이점은 HTTP Response Body가 생성되는 방식이다. 기존의 MVC 컨트롤러는 view기술을 사용하지만 Restful 웹서비스 컨트롤러는 객체를 반환하기만 하면 객체 데이터는 JSON/XML 형식의 HTTP 응답을 직접 작성하게된다.
다시 정리하자면 @Controller의 주용도는 view(화면)을 리턴하는 것이고, @RestController는 데이터를 리턴하는 것이 주용도하고 할 수 있다. 물론 @Cotroller의 경우 메서드에 @ResposeBody를 사용하여 객체를 리턴할 수도 있다.
Spring MVC의 전통적인 Work Flow
Controller(BasicController)
@Controller
@RequestMapping("/basic/*")
public class BasicController {
@RequestMapping("/hello")
public String sayHello(){
return "hello";
}
}
View(hello.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
hello world
</body>
</html>
Spring MVC Rest의 Work Flow
1. 클라이언트는 URI 형식으로 웹서비스에 요청을 보낸다.
2. 요청은 Handler Mapping과 그 타입을 찾는 DispatcherServlet에 의해 인터셉트
3. 요청은 Controller에 의해 처리되고 응답은 DispatcherServlet으로 리턴된 후 DispatcherServlet은 View로 디스패치
@RequestMapping("/view/bluesPick")
@Resource
@Mapper
@Repository
@Service
@ApiOperation(
value="블루스픽 목록 view",
httpMethod = "GET"
)
@ApiModelProperty(value = "카테고리 아이디.(메인 카테고리)")
@GetMapping("/list")
@GetMapping("/category/main/{categoryId}")
@PutMapping("/categories/order")
@PostMapping("/category")
@DeleteMapping("/category/main/{categoryId}")
@ResponseBody
@Slf4j
@Value("${bna.api.server.rbb.categories}")
@Autowired
@Qualifier("categoryEditMapper")
@Api(description = "블루스픽", tags = "BluesPick")
@ApiParam(value = "검색 조건", required = false)
@Getter
@Setter
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@RequiredArgsConstructor
@Transactional(readOnly = true)
@ModelAttribute SearchModel search
@ResponseStatus(value = HttpStatus.OK)
@RequestBody @Valid CTRegisterDTO registerData
@PathVariable(value = "id")
@Select("SELECT * FROM rbb.category_main WHERE use_at = 'Y' ORDER BY order_no")
@Delete("DELETE FROM rbb.product WHERE product_id = #{productId}")
@Builder
@ConstructorProperties({"id", "name", "showAt"})
@JsonProperty("id")