카테고리 없음

스프링 어노테이션

tttck88 2019. 11. 22. 17:59

@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")