데이터 디자인
담당실제 렌더링되어 보이는 페이지
요청을 받고 응답
하는 로직 담당 HandlerMapping, HanddlerAdapter 등 Spring
MVC 구성 요소들과 상호 작용하며 처리 위임(Front Controller Pattern)
Front Controller Pattern, 애플리케이션 가장 앞단에 배치되어 타 구성요소들과 상호작용하며 클라이언트의 요청을 처리하는 패턴
@Contorller
- 특정 웹 페이지 모델 만들고 반환할때 사용@RestController
- RESTful API 서버 만들때 사용@RestController
는 @Controller
+ @ResponseBody
합쳐진 어노테이션클라이언트에서 요청이 들어올 때, 해당 요청을 수행할 비즈니스 로직을 만들어 제어하는 객체.
스프링에서는 컨트롤러에서 세부적으로 서비스 레이어를 만들어 해당 요청 사항을 객체 지향적 방식으로 세분화해 관리한다.
(컨트롤러 -> 서비스 레이어)
비즈니스 로직 : 프로그램에서 실세계의 규칙에 따라 데이터 생성, 표시, 저장, 변경하는 부분을 의미하며, 사용자에게 보이지 않는 부분에서 데이터를 처리하는 코드이다.
@GetMapping
, @PostMapping
같은 애너테이션이 분은 메서드를 핸들러 메서드라 지칭@PathVariable
, URL 경로에 변수 넣어주는 것@RequestMapping(value = "user/email/{email:.+}", method = RequestMethod.GET)
public ModelAndView getUserByEmail(@PathVariable("email") String email) {
@GetMapping("/coffee")
과 같이 HTTP Request Method
(GET/POST 등)와 Mapping URL
기준으로 Handler 매핑HttpStatus 상태 코드를 직접 제어하는 HttpEntity의 확장 개념
사용자의 HttpRequest에 대한 응답 데이터가 포함된다.
RestTemplate 및 @Controller
메서드에 사용된다.
결괏값, 상태 코드, 헤더값을 모두 프론트에 넘겨줄 수 있다.
@RequestMapping("/handle")
public ResponseEntity<String> handle() {
URI location = ...;
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setLocation(location);
responseHeaders.set("MyResponseHeader", "MyValue");
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}
public class Flower{
private Long flowerId;
private String flowerName;
private String flowerCode;
}
public class FlowerPostDto{
private String flowerName;
private String flowerCode;
public void setFlowerName{
this.flowerName = flowerName;
}
public void getFlowerName{
this.flowerName = flowerName;
}
public void setFlowerCode{
this.floweCode = flowerCode;
}
public void getFlowerCode{
this.flowerCode = flowerCode;
}
@RestController
@RequestMapping("/flowerInfo")
public class FlowerController{
@PostMapping
public ResponseEntity postFlower(FlowerPostDto flowerPostDto){
return new ResponseEntity<FlowerPostDto>(flowerPostDto, HttpStatus.CREATED);
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
@Getter
@Setter
public class FlowerPostDto{
@NotSpace(message = "공백 금지")
private String flowerName;
@Pattern(regex = "^([a-zA-Z])+(\\s?[a-zA-Z])*$,
message = "영문만 허용 가능하며, 글자 사이 한 칸의 스페이스만 포함 가능"
private String flowerCode;
}
참고