-
웹 MVC 8부 ~ 11부Spring 2020. 7. 11. 20:06
8부 HtmlUnit
9부 ExceptionHandler
여기서 바로 AppError로 반환하는데 ResponseEntity<AppError>처럼 보낼 수 도 있다.
그리고 이 컨트롤러에만 관한게 아니라 전체를 다룰때는 @ControllerAdvice를 붙여서 사용한다.
@ControllerAdvice인 클래스를 작성하고 @ExceptionHandler에 관한 메소드를 모아서 사용한다.
- 커스텀 에러 페이지
resources/static/error/ 에러코드와 맞는이름으로 작성하면 자동으로 바인딩
ex) 404 -> 404 / 500번대의 에러 -> 5xx
10부 Spring HATEOAS
Rest API 를 만들때 서버가 리소스에 대한 정보를 제공할 때, 그 리소스와 연관이있는 링크 정보들까지 같이 제공하고,
클라이언트는 제공된 연관 링크정보를 바탕으로 리소스에 접근한다.
EntityModel<Hello> helloEntityModel = new EntityModel<>(hello); helloEntityModel.add(linkTo(methodOn(SampleController.class).hello().withSelfRel());
- ObjectMapper
hateoas 의존성 추가시, 스프링 부트가 많은것을 제공해주는데, 그 중 중요한 두가지가
ObjectMapper, LinkDiscovers이다.
ObjectMapper는 우리가 제공하는 리소스를 json으로 변환할 때 사용하는 인터페이스이다.
객체를 json으로 변환하거나, json을 객체로 변환시 사용하는 mapper이다.
따로 등록할 필요없이 주입받아 사용할 수 있다.
- LinkDiscovers
Xpath를 확장해서 만든 HATEOAS용 클라이언트 API이다.
rest api로 다른쪽 서버 api를 받았는데, 그게 hateoas를 지원한다면(링크 정보를 담고 있다면) 메소드를
이용해서 self에 해당하는 링크정보를 가져올 수 있다.
11부 CORS
SOP : 같은 Origin에서만 리소스 요청이 가능하게한 정책
ex) http://localhost:8080 에 실행중인 앱에서 https:localhost:18080 서버로 리소스 요청을 할 수 없다.
기본적으 SOP 를 따른다.
COR : 서로 다른 origin끼리 리소스를 공유할 수 있는 기능을 제공하는 표준
서버를 더 개방적으로 열어둔것 이라고 생각.
Origin : 3가지를 조합해서 나온 것이 하나의 origin이다.
- URL 스키마 (http, https)
- hostname (localhost 등)
- port (8080,18080 등)
원래 스프링 MVC에서 CORS 기술을 사용하려면, 여러가지 Bean 설정을 해야하지만,
스프링 부트는 그러한 설정을 자동으로 해준다.
CORS 를 사용하기 위해 @CrossOrign(origin = "다른 origin") 애노테이션 활용
컨트롤러 단위로 설정하지 않고, 한 파일에서 전역적으로 관리하고 싶으면 WebConfig 클래스에서
addCorsMappings()를 오버라이딩 해서 사용한다.
8080 포트에서 보낸 값을 18080에서 원래 못받지만 CORS를 활용해서 받았다.
※참조
velog.io/@max9106/Spring-Boot-HATEOAS
'Spring' 카테고리의 다른 글
데이터 3부 : MySQL (0) 2020.07.12 데이터 2부 : 인메모리 데이터베이스 (0) 2020.07.12 웹 MVC - 1부 ~ 7부 (0) 2020.07.09 테스트 (0) 2020.07.08 로깅 - 1부, 2부 (0) 2020.07.08