개발을 하고 was를 기동할때 아래와 같은 메세지를 만날 수 있다. Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\oingdaddy\target\classes\~\oingService.sql]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 55; columnNumber: 22; The content of elements must consist of well-..
[WARN ][o.s.w.s.m.s.DefaultHandlerExceptionResolver.logException:line199] - Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.LinkedHashMap] REST API 샘플을 만들다가 응답과정에서 위와 같은 오류를 만났다. No converter found for return value of type ! 왜 이런 오류가 났는지 알아보도록 하자. Controller의 모습은 일반적인 REST API의 모습과 거의 같다. Controller @RestC..
API 통신을 할때 json으로 메세지를 보내면 다음과 같은 오류를 자주 접할 수 있다. 바로 Content Type이 맞지 않는다는 메세지이다. 위와 같이 message가 application/json not supported면 요청을 보낼 때 Header에 Content-Type을 application/json 으로 설정해주면 된다. 그 외의 다른 Type으로 메세지를 보낼때는 그에 맞는 Content-Type을 적절하게 잘 설정해 주자. 끝!
MyBatis 진영에서 MyBatis-Spring-Boot-Starter 라는것을 내놓았다. 아니.. 나만 몰랐던것 같다. 누군가가 작성한 샘플을보니 mybatis-config.xml (MyBatis 설정파일) 파일에 보통 있어야 할 내용들이 없는데도 있는것처럼 동작을 하는것이 의아하게 느껴져서 찾아보니 application.yml 파일에 기술이 되어 있었다. application.yml을 통해 기존에 mybatis-config.xml에서 사용하던 기능을 전부 다 사용할 수 있는것은 아니고 더 적은 xml 구성정도 지원을 해준다고 보면 된다. 이를 어떻게 설정하고 사용하는지 알아보자. pom.xml org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 가..
일전에 springboot base에서 File to DB Spring Batch 에 대한 예제를 포스팅했었다. 이번에는 DB to File Spring Batch에 대한 예제를 살펴보도록 하겠다. 대략적인 시나리오는 DB로부터 내용을 읽어서(JdbcCursorItemReader) 이 내용을 가공하고(Processor) File을 만들어(FlatFileItemWriter) 주는 시나리오이다. 간단한 테스트를 위해 H2 DB를 사용했으며 springboot의 version은 2.4.x이다. 그 외에 Spring Batch에 대한 기본 설정(datasource 등)은 되어 있어야 한다. H2 DB 삽입내용 INSERT INTO `BATCH_SAMPLE_EMPLOYEE` (`USER_ID`, `USER_NAM..
지난번에는 Custom ArgumentResolver를 만드는 예제를 해봤다. 이전에 다뤘던 ArgumentResolver가 Controller에 들어오는 파라미터를 가공 및 추가를 하는데 사용되었다면, RetunValueHandler는 리턴 타입으로 판단하여 처리하는 역할을 한다. 기본적인 동작방식은 ArgumentResolver와 매우 흡사하다. 어떻게 처리하는지 살펴보자. Custom ReturnValueHandler @Component public class ResultReturnValueHandler implements HandlerMethodReturnValueHandler { @Override public boolean supportsReturnType(MethodParameter retur..
Spring을 사용하면서 ArgumentResolver라는것을 한번은 들어봤을 것이다. 이것은 Servlet 과 Controller 사이에서 전달되어진 값을 가공하거나 추가할 필요가 있을때 사용한다. AOP와 같이 중복 코드를 제거하는데 큰 의미를 가지고 있는것 같다. 일반 개발자라면 많이 다룰일이 없을듯하고 공통을 잡는 사람들이 주로 다루는 내용들이다. 그럼 간단히 Custom ArgumentResolver를 만드는 방법에 대해서 알아보자. 샘플을 구현할때 대략적인 시나리오는 여기저기 많이 사용되는 사용자에 대한 정보를 ArgumentResolver를 통해서 생성하는 것이다. 물론 이런 정보는 HttpServletRequest를 통해서 가지고 올 수 있지만 위에서 언급한대로 중복된 소스를 줄인다는것에 ..
그동안 잘 사용하고 있던 RestTemplate이 곧 Deprecated가 된다고 한다. 그렇다고 못쓰는건 아니다. NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports sync, async, and streaming scenarios. 그러면서 spring docs에서는 WebClient로 바꾸라고 권장을 하고 있다. 하지만..