본문 바로가기

Spring

StreamingResponseBody 사용시 주의점 파일 다운로드 API 기능을 개발하는 과정에서 삽질한 경험를 공유드립니다 ㅎ 목적​Streaming 형태의 Response로 제공하고 싶었습니다.그래서 구글링해보니 Spring에선 아래 3가지 Response를 제공합니다.​참고 : Spring 4.2 이상- ResponseBodyEmitter- SseEmitter- StreamingResponseBody​이 중 StreamingResponseBody는 비정형화된 Byte 응답을 Streaming형태로 줄 때 사용합니다.StreamingResponseBody를 이용해 Controller와 Service는 아래와 같이 구현했습니다.​Controller @GetMapping("/sample") public StreamingResponseBody downloa..
[Spring] Stream 형태로 Response 응답 주기 (feat. MyBatis, Observer) 환경 Spring Version : 4.2 이상 MySQL + MyBatis 문서 Http Stream Return은 총 3가지가 있는듯하다. (Spring 4.2부터) - ResponseBodyEmitter : https://docs.spring.io/autorepo/docs/spring-framework/4.3.5.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.html - SseEmitter : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/meth..
[Spring] 기본 생성자가 없는 객체 바인딩시키기 참고) Bean 설정이 아닙니다. Controller에서 매핑된 URL로 메서드가 실행되는데요~ 이 경우 파라메터에 모델을 선언했다면 URL queryString에 있는 프로퍼티 값이 모델 멤버(setter)와 동일하다면 자동으로 Binding됩니다. public class Foo { private int id; public void setId(int id) { this.id = id; } public int getid() { return this.id; } } @Controller public class FooController { @RequestMapping("/foo") public String getFooView(Foo fooModel) { return "foo"; } } - 인자가 없는 기본 생..
RestTemplate Encoding RestTemplate을 이용해 getForObject를 하다보면 http call이 잘된다. 하지만.. http://foo.com?bar=car&fooUrl=http://paramater?go=go&key=key fooUrl을 그대로 전송하면 문제가 발생할 수 있으니 인코딩이 필요하다. 그런데 URL 쿼리스트링에 Encoding을 하게되면 문제가 발생한다. getForObject에 Url을 String 타입으로 주게되면 내부적으로 또 Encoding을 하는 듯하다. 그렇다면...? 방법은 URI 객체 사용이다. // Spring 내장 Utils 사용 String encodeFooUrl = UriUtils.encode("http://paramater?go=go&key=key", "UTF-8") URI u..
Spring Endpoint Health 설정 구글에 Spring Endpoint라고 검색하면 많은 설정 정보들이 존재하는데 이번에 사용할 기능은 health check만 설정하도록 해본다. application.properties # springboot에서 제공하는 기능 - 서버 정보를 알수 있음 # http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html endpoints.enabled=false endpoints.health.enabled=true # health 체크시 여러가지 응답 정보가 가는데, status 정보만 노출하도록 설정 endpoints.health.sensitive=true build.gradle compile("or..