Spring MVC/04.Rest
-
Swagger를 사용하다 보면 가끔 전혀 생각지 못했던 곳에서 오류가 나오곤 한다. 오늘은 이런 오류에 대해서 살펴보자. [06-27 16:27:39] [ WARN] [i.s.m.p.AbstractSerializableParameter.getExample-421] Illegal DefaultValue null for parameter type integer java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Long.parseLong(Long.java:721)..
[swagger]Illegal DefaultValue null for parameter type integerSwagger를 사용하다 보면 가끔 전혀 생각지 못했던 곳에서 오류가 나오곤 한다. 오늘은 이런 오류에 대해서 살펴보자. [06-27 16:27:39] [ WARN] [i.s.m.p.AbstractSerializableParameter.getExample-421] Illegal DefaultValue null for parameter type integer java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Long.parseLong(Long.java:721)..
2022.06.30 -
이번 포스트에서는 REST API에서 자원 update 시 사용하는 Put과 Patch의 차이점에 대해서 살펴보자. Put ? Patch? REST API는 Http method를 통해서 API의 동작 의도를 나타낸다. 자료의 조회는 GET, 추가는 POST, 삭제는 DELETE이다. 그리고 자료의 수정을 나타낼 때는 PUT을 사용하는데 비슷한 녀석으로 PATCH라는 것도 있다. 결국은 영어인가. ㅜㅜ 정말 영어권에서 살면서 단어의 뜻을 명확히 구별할 수 있다면 이런 혼선이 훨씬 줄어들 것이라는 생각이 든다. 둘 다 수정을 뜻하기는 하지만 PUT은 새로운 녀석을 놓고 오는 것으로 대체를 의미한다 반면 PATCH는 땜빵으로 자원의 일부를 변경하는 것을 의미한다. 따라서 허허벌판에 집을 새우는 것은 POST..
[Spring] Update 시 Put vs Patch이번 포스트에서는 REST API에서 자원 update 시 사용하는 Put과 Patch의 차이점에 대해서 살펴보자. Put ? Patch? REST API는 Http method를 통해서 API의 동작 의도를 나타낸다. 자료의 조회는 GET, 추가는 POST, 삭제는 DELETE이다. 그리고 자료의 수정을 나타낼 때는 PUT을 사용하는데 비슷한 녀석으로 PATCH라는 것도 있다. 결국은 영어인가. ㅜㅜ 정말 영어권에서 살면서 단어의 뜻을 명확히 구별할 수 있다면 이런 혼선이 훨씬 줄어들 것이라는 생각이 든다. 둘 다 수정을 뜻하기는 하지만 PUT은 새로운 녀석을 놓고 오는 것으로 대체를 의미한다 반면 PATCH는 땜빵으로 자원의 일부를 변경하는 것을 의미한다. 따라서 허허벌판에 집을 새우는 것은 POST..
2022.06.29 -
스프링 강의를 열심히 하고 난 후 의외로 많은 경우에 @ModelAttribute와 @RequestBody를 언제 써야하는지 잘 모르는 경우가 있어서 차이를 정확히 알아보기로 한다. (돌이켜보면 시간상, 설명의 편의상 form에서 넘어온 데이터를 처리하기 위해서는 @ModelAttribute를 사용하고 ajax를 통해서 넘어온 post, put 데이터를 처리하기 위해서는 @RequestBody를 쓰라고 이야기 했는데 한 70%만 맞는 말이다.) @ModelAttribute vs @RequestBody 사실 둘의 비교는 간단하다. @ModelAttribute는 파라미터로 전달된 데이터를 처리한다. 그리고 @RequestBody는 request body를 통해서 전달된 내용을 처리한다. 그럼 언제 그런 것들..
[spring]@ModelAttribute vs @RequestBody스프링 강의를 열심히 하고 난 후 의외로 많은 경우에 @ModelAttribute와 @RequestBody를 언제 써야하는지 잘 모르는 경우가 있어서 차이를 정확히 알아보기로 한다. (돌이켜보면 시간상, 설명의 편의상 form에서 넘어온 데이터를 처리하기 위해서는 @ModelAttribute를 사용하고 ajax를 통해서 넘어온 post, put 데이터를 처리하기 위해서는 @RequestBody를 쓰라고 이야기 했는데 한 70%만 맞는 말이다.) @ModelAttribute vs @RequestBody 사실 둘의 비교는 간단하다. @ModelAttribute는 파라미터로 전달된 데이터를 처리한다. 그리고 @RequestBody는 request body를 통해서 전달된 내용을 처리한다. 그럼 언제 그런 것들..
2022.05.12 -
이번 포스트에서는 Pageable 타입을 반환하는 Controller를 Swagger에서 제대로 표현해주지 못하는 문제의 해결책에 대해서 살펴보자. Swagger를 위한 Pageable 타입 변경 Controller 구성 JPA를 이용해서 모델단을 구성한 후 전체 목록을 반환하는 과정에서 페이징 처리를 위해 아래와 같이 Controller를 구성한 상태이다. @GetMapping public ResponseEntity search(Pageable pageable) { log.debug("pageable: {}", pageable); return new ResponseEntity(service.selectCustomer(pageable), HttpStatus.OK); } 단위테스트 아래와 같이 단위테스트를..
[Swagger] Pageable 객체 처리이번 포스트에서는 Pageable 타입을 반환하는 Controller를 Swagger에서 제대로 표현해주지 못하는 문제의 해결책에 대해서 살펴보자. Swagger를 위한 Pageable 타입 변경 Controller 구성 JPA를 이용해서 모델단을 구성한 후 전체 목록을 반환하는 과정에서 페이징 처리를 위해 아래와 같이 Controller를 구성한 상태이다. @GetMapping public ResponseEntity search(Pageable pageable) { log.debug("pageable: {}", pageable); return new ResponseEntity(service.selectCustomer(pageable), HttpStatus.OK); } 단위테스트 아래와 같이 단위테스트를..
2022.05.05 -
Interceptor와 swagger를 같이 사용하다 보면 필요한 경로를 효율적으로 exclude 시키지 못해서 아래와 같은 오류를 보게 된다. 이번 포스트에서는 위 오류를 처리하기 위해서 exclude 해줘야 하는 경로들을 정리해 보자. interceptor에서 swagger 제외하기 Interceptor의 경로 표현과 ant 표현식 Interceptor를 설정할 때는 적용할 경로 패턴(addPathPattern)과 적용된 것 중 제외할 경로(excludePathPattern)이 필요하다. 경로 패턴을 적용할 때 둘 다 ant 표현식을 사용할 수 있다. ant 표현식은 웹에서 자주 사용되기 때문에 한번 잘 정리해두고 가자. ? : 1개의 문자와 매칭 * : 0개 이상의 문자와 매칭, 주로 하나의 폴더에..
[swagger]swagger와 interceptorInterceptor와 swagger를 같이 사용하다 보면 필요한 경로를 효율적으로 exclude 시키지 못해서 아래와 같은 오류를 보게 된다. 이번 포스트에서는 위 오류를 처리하기 위해서 exclude 해줘야 하는 경로들을 정리해 보자. interceptor에서 swagger 제외하기 Interceptor의 경로 표현과 ant 표현식 Interceptor를 설정할 때는 적용할 경로 패턴(addPathPattern)과 적용된 것 중 제외할 경로(excludePathPattern)이 필요하다. 경로 패턴을 적용할 때 둘 다 ant 표현식을 사용할 수 있다. ant 표현식은 웹에서 자주 사용되기 때문에 한번 잘 정리해두고 가자. ? : 1개의 문자와 매칭 * : 0개 이상의 문자와 매칭, 주로 하나의 폴더에..
2021.12.09 -
CORS(Cross Origin Resource Sharing)는 REST 서비스를 제공하려면 필요한 녀석이다. 물론 CORS를 제공하지 않더라도 서비스가 가능하기는 하지만 서비스를 받는 쪽에서 RestTemplate을 이용하는 등 부가적인 작업이 필요하다. https://goodteacher.tistory.com/267?category=828440 03. RestTemplate RestTemplate 가끔 REST API를 자바 영역에서 사용해야할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자 goodteacher.tistory.com 이번 포스트에서는 SpringBoot를 이용해서 CORS를 설..
[springboot]CORS 설정CORS(Cross Origin Resource Sharing)는 REST 서비스를 제공하려면 필요한 녀석이다. 물론 CORS를 제공하지 않더라도 서비스가 가능하기는 하지만 서비스를 받는 쪽에서 RestTemplate을 이용하는 등 부가적인 작업이 필요하다. https://goodteacher.tistory.com/267?category=828440 03. RestTemplate RestTemplate 가끔 REST API를 자바 영역에서 사용해야할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자 goodteacher.tistory.com 이번 포스트에서는 SpringBoot를 이용해서 CORS를 설..
2021.09.08 -
간만에 SpringBoot 기반의 Rest 애플리케이션을 테스트 하다 보니 한글 문제가 발생해서 대처 방안을 정리한다. MockMVC 테스트 시 response content의 한글 깨짐 문제 MockMVC를 이용한 Rest 서비스의 단위 테스트 일반적으로 Service 등을 Mocking 하지 않고 그대로 사용하기 위해서는 아래와 같이 단위 테스트 할 수 있다. @SpringBootTest public class CatoryControllerTest { @Autowired CategoryController cController; MockMvc mock; @BeforeEach public void setup() { mock = MockMvcBuilders.standaloneSetup(cController..
[spring boot]MockMVC 테스트시 response content의 한글 깨짐간만에 SpringBoot 기반의 Rest 애플리케이션을 테스트 하다 보니 한글 문제가 발생해서 대처 방안을 정리한다. MockMVC 테스트 시 response content의 한글 깨짐 문제 MockMVC를 이용한 Rest 서비스의 단위 테스트 일반적으로 Service 등을 Mocking 하지 않고 그대로 사용하기 위해서는 아래와 같이 단위 테스트 할 수 있다. @SpringBootTest public class CatoryControllerTest { @Autowired CategoryController cController; MockMvc mock; @BeforeEach public void setup() { mock = MockMvcBuilders.standaloneSetup(cController..
2021.08.30 -
RestTemplate가끔 REST API를 자바 영역에서 사용해야 할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자바 영역에서 일반 요청 형태로 REST 서비스를 호출해서 정보를 받고 이를 다시 ajax로 얻어와야 한다.자바 영역에서 REST 서비스를 편리하게 사용하기 위해 RestTemplate을 사용할 수 있다. 빈 등록RestTemplate은 스프링에서 제공해주는 기본 템플릿이다. 이를 사용하기 위해서는 아래와 같이 빈을 생성해 볼 수 있다.@Beanpublic RestTemplate restTemplate() { return new RestTemplate();} ..
03. RestTemplateRestTemplate가끔 REST API를 자바 영역에서 사용해야 할 경우가 있다. ajax로 처리해야 하는데 서비스를 제공하는 서버에서 cross origin에서의 접근을 허용하지 않는 경우가 대표적이다. 이런 경우는 자바 영역에서 일반 요청 형태로 REST 서비스를 호출해서 정보를 받고 이를 다시 ajax로 얻어와야 한다.자바 영역에서 REST 서비스를 편리하게 사용하기 위해 RestTemplate을 사용할 수 있다. 빈 등록RestTemplate은 스프링에서 제공해주는 기본 템플릿이다. 이를 사용하기 위해서는 아래와 같이 빈을 생성해 볼 수 있다.@Beanpublic RestTemplate restTemplate() { return new RestTemplate();} ..
2020.07.14