본문 바로가기

자바11

ClientAbortException 시 HttpServletResponse 에서 .getOutputStream() 관리 이전 게시물에서 IOException이 발생하면 내가 원하는대로 json 응답을 해주고 싶었다. 파일 다운로드 try catch 시 자원 반납, exception 시 json 응답이번에 많은 테스트를 하며 기록해 두면 좋을 것 같은 내용이다. 상황은 다음과 같다.1. 파일 다운로드를 모두 void로 리턴한다.- 스트림으로 이미 내보내서 커밋 됐는데 또 json으로 리턴하려고so23go.tistory.com 하지만 ClientAbortException이 발생한 경우에 outputStream.close()하는 부분에서 에러가 발생한다. 이유가 뭔지 알아보니 서블릿에서 몇몇의 경우에 알아서 스트림을 정리한다고 한다. 스트림을 정리하는 건 다음의 경우 등이 있다. 응답이 클라이언트로 완전히 전송된 경우서블릿의 .. 2024. 12. 5.
파일 다운로드 try catch 시 자원 반납, exception 시 json 응답 이번에 많은 테스트를 하며 기록해 두면 좋을 것 같은 내용이다. 상황은 다음과 같다.1. 파일 다운로드를 모두 void로 리턴한다.- 스트림으로 이미 내보내서 커밋 됐는데 또 json으로 리턴하려고 하니 response has already been committed 에러가 나는 것으로 보임2. 파일 다운로드 중간에 IOException 이 발생한 경우 json으로 응답하려고 함 크게 이 두가지다.바로 코드로 들어가자public void fileDownload(){ // ... setDownloadResponseHeaders(...); OutputStream outputStream = response.getOutputStream(); try (FileInputStream fileInputStream = .. 2024. 12. 4.
mockMvc에서 HttpServletRequest 값 넣는 방법 상황- 컨트롤러 테스트임- mock 테스트로 session은 잘 넣을 수 있으나 HttpServletRequest 을 넣으려고하니 안 들어감 대충 코드는 이렇다.@GetMapping("/~~") public void someMethod(@Valid SomeVo someVo, @PathVariable("lang") @NotBlank String lang, HttpServletRequest req, HttpServletResponse res) throws Exception { // ... //public static final 로 선언한 자료구조 SOME_MAP.remove(req.getRequestedSessionId()); } req.getRequest.. 2024. 12. 3.
[스프링] .properties 에 값이 없는 경우 @Value 기본 값 설정 [스프링] .properties 에 값이 없는 경우 @Value 기본 값 설정 이번에 신기한 거를 발견했다. 상황 먼저 보면 1. 프로퍼티 파일에 새로 추가해야 하는 항목이 생김. 2. 해당 항목은 Y 또는 N으로 진행됨. 3. 여러 사이트에 이미 프로퍼티가 고정되어 있음. (추가가 어려운 상황) 4. 이때 기본적으로 N으로 설정한 효과를 줘야 함 이런 상황이다. @Value("${test.property:N}") String prop; 이렇게 집어오고싶은 프로퍼티 옆에 `:(값)`을 적으면 된다. 띄어쓰기는 하면 인식이 안 된다. 2024. 2. 19.
[JDBC] DB PK변경 방법 [JDBC] DB PK변경 방법 MariaDB에서 테이블 생성 후 pk를 바꿔야 하는 일이 생겼다. 방법은 다음과 같다. 1. JPA로 테이블 생성 2. 기존 PK 제거 3. 새로운 PK 생성 간단하다. 그러나 고려할게 몇 가지 있었는데 단계적으로 가면서 알아보자. 1. JPA로 테이블 생성 JPA로 테이블 생성은 특별하지 않다. @Entity @Table(name="test_table") @Getter @NoArgsConstructor public class testTable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idx; @Column(name="target", columnDefinition = "VARCHAR(5.. 2024. 2. 7.
스프링 테스트 코드 @RestControllerAdvice를 거치게 하는 방법 스프링 테스트 코드 @RestControllerAdvice를 거치게 하는 방법 스프링에서 컨트롤러 테스트 코드 작성 시 @RestControllerAdvice를 거치지 않아서 Exception 처리가 통과 안 한 경우가 있었다. @RestControllerAdvice를 거치도록 하는 방법은 두 가지를 찾았다. @MockBean을 사용해서 서비스를 등록할 때, @Mock을 사용해서 서비스를 등록할 때를 나눠서 살펴보자. 1. @MockBean을 사용한 경우 첫 번째 방법은 서비스를 @MockBean으로 등록하는 방법이다. @WebMvcTest(TestController.class) class TestControllerTest { @Autowired MockMvc mockMvc; @MockBean Sampl.. 2024. 1. 25.