본문 바로가기

spring13

여러 API 결과 조합(with 비동기) 최종 결과 데이터를 만들기 위해 여러 API 들을 호출하고, 얻어온 각 API 결과들을 조합하는 로직을 만든다고 해보자. 먼저 아래코드처럼 각 API 결과들을 순차적으로 가져와 조합하는 방법이 있다. @Service public class SimpleContext { @Autowired private FirstJobService firstJobService; @Autowired private SecondJobService secondJobService; @Autowired private ThirdJobService thirdJobService; @Autowired private FourthJobService fourthJobService; public CombineContextResult combine(.. 2021. 10. 31.
jackson-dataformat-xml 이슈 정리 jackson-dataformat-xml(2.12.4) 를 사용하면서 겪은 이슈를 정리했다. cf) 기존 코드는 jaxb-api(2.1) 을 사용중이었다. 1. interface 네이밍 interface 네이밍은 자바에서 예약어기 때문에 xml element 로 좋은 네이밍은 아니다. 하지만 기존 코드와 똑같이 개발해야 했다. 먼저 바인딩 시킬 필드에 아래와 같이 @XmlElement 애노테이션을 붙이고 name을 interface로 지정했다. @XmlElement(name = "interface") private String interFace; 롬복을 썼기 때문에 자동으로 setter는 아래와 같이 setInterFace 네이밍으로 만들어졌다. public void setInterFace(String .. 2021. 10. 19.
@RequestParam 사용 시 Null에 대한 고민 정리 RequestParam 애노테이션에서 required = false 인 경우, 값이 없을 때 null 로 채워진다. RequestParamMethodArgumentResolver 에서 request.getParameterValues(name) 가 null 이고 결국 리턴되는 arg는 null 이 된다. public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver implements UriComponentsContributor { @Nullable protected Object resolveName(String name, MethodParameter parameter, NativeWebReque.. 2021. 9. 20.
@RequestParam 사용 시 주의사항 요즘은 스프링 컨트롤러를 만들 때 @GetMapping, @PostMapping 으로 HTTP Method 를 명시하거나, @RequestMapping을 쓰더라도 HTTP Method 를 명시적으로 추가하는게 일반적이다. 그런데 예전 레거시 스프링 컨트롤러를 재개발 하는 상황에서 @RequestMapping 에 HTTP Method 가 명시적으로 적혀있지 않거나, 있다고 하더라도 GET, POST 둘다 받도록 하는 경우가 있어 똑같이 맞춰서 개발해야 했다. GET + @RequestParam 인 경우는 query parameters(query string) 만 고려해서 처리하면 되서 간단한데, POST 요청까지도 같이 받는다면 @RequestParam 이 query parameters(query stri.. 2021. 9. 11.
WebClient 사용할때 주의 (3편) response body가 필요 없을 때 response body 가 필요없을 때 releaseBody(), toBodilessEntity(), bodyToMono(Void.class) 세가지 방법이 있다. 그런데 bodyToMono(Void.class) 는 한가지 문제가 있다. reactor-netty 는 bodyToMono(Void.class) 썼을 때 맺었던 커넥션을 커넥션풀에 반납을 하지 못한다. 왜냐하면 reactor-netty 는 통신하고 있는 서버에서 더 받을게 있는지 여부를 모르기 때문이다. 따라서 이 경우 reactor-netty는 해당 커넥션을 닫고 커넥션풀에서 제거한다. 그래서 reactor-netty 메인테이너는 releaseBody(), toBodilessEntity() 두가지만 .. 2021. 6. 23.
Spring Cloud Gateway 인코딩 이슈 http://ybs.com/filtering?sort[]=id,desc&keyword=%EC%96%91%EB%B4%89%EC%88%98 위와 같은 URL 로 요청이 왔을 때, Spring Cloud Gateway 에서 뒷단 서버로 보내기 전 인코딩 여부 검사를 한다. 그런데 '[' 문자가 Invalid character 로 exception 이 발생하면서 인코딩이 안됐다고 판단해서, 재인코딩을 하게 되고 최종적으로는 keyword 값이 두번 인코딩한 결과가 나온다(정작 중요한 '[', ']' 문자는 인코딩안되고 이미 된것만 또 인코딩한 꼴). '[' 문자가 왜 Invalid character 로 exception 이 발생했나를 알아보자. Spring Cloud Gateway 는 허용하는 QUERY_PAR.. 2021. 6. 18.