본문 바로가기

spring boot

(16)
Filter 추가 후 HTTP가 무조건 200으로 전달되는 에러(filterChain.doFilter) 필터를 추가한 후 컨트롤러가 제대로 작동하는지 다시 테스트를 해보니, 원래 201로 전달되어야 하는 테스트가 200으로 전달되면서 실패로 떨어졌다.  문제의 필터import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;import org.springframework.web.filter.OncePerRequestFilter;import com.t..
@NotBlank 이용해서 dto값 검증하기 1. build.gradle에 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-validation’ 2. 컨트롤러에 @Validated 추가public ResponseEntity signUp(@Validated @RequestBody MemberSignUpRequest request) { return ResponseEntity.status(HttpStatus.CREATED).body(new MemberSignUpResponse(memberService.signUp(request))); } 3. dto에 @NotBlank 추가import javax.validation.constraints.NotBlank;import lombok.Bui..
@WebMvcTest vs @AutoConfigureMockMvc springframework의 @WebMvcTest 설명 원문:Annotation that can be used for a Spring MVC test that focuses only on Spring MVC components.Using this annotation will disable full auto-configuration and instead apply only configuration relevant to MVC tests (i.e. @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter, Filter, WebMvcConfigurer and HandlerMethodArgumentResolver beans but n..
406 에러 컨트롤러 테스트를 진행했는데, 406 에러로 테스트 fail이 떨어졌다. java.lang.AssertionError: Status expected: but was: 406 error?406 Not Acceptable하이퍼텍스트 전송 프로토콜(HTTP)의 406 Not Acceptable 클라이언트 에러 응답 코드는 서버가 요청의 주도적인 콘텐츠 협상 헤더에 정의된 허용 가능한 값 목록과 일치하는 응답을 생성할 수 없으며, 서버가 기본 표현을 제공하지 않음을 나타냅니다.출처: https://developer.mozilla.org/ko/docs/Web/HTTP/Status/406 서버 응답 형식이나 값 때문에 발생하는 문제로 추정되는데, 응답을 전달하는 ResponseDto에 @Getter를 추가해서 해결..
@EnableJpaAuditing을 별도의 config 파일에 분리 시 테스트에서 인식 안되는 문제 데이터의 생성일자, 수정일자를 jpa를 통해 자동으로 넣기 위해 BaseEntity를 생성하고, entity 저장 시 등록 되는지 테스트를 해보았으나 결과값이 null로 나왔다. @EnableJpaAuditing을  Application.java에 추가하지 않고 JpaConfig 파일을 별도로 만들어서 추가한 이유는,  Mock 테스트 시 사용하는 @WebMvcTest와 충돌하기 때문이다. 위의 이유로 JpaConfig 파일을 별도로 생성했으나, 문제는 테스트할 때 @EnableJpaAuditing이 인식되지 않는건지 계속 createdDate가 null로 나왔다.  JpaConfig.javaimport org.springframework.context.annotation.Configuration;imp..
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceSc 에러 전문 :Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean w..
H2 DB 연결 h2는 인메모리 관계형 데이터베이스로 별도의 설치 없이 프로젝트 의존성만으로 관리가 가능하다. 인메모리 즉, 메모리에서 실행되기 때문에 어플리케이션이 재시작될때 마다 초기화되어 주로 테스트 용도로 사용된다.  1. 의존성 주입gradle의 경우 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.h2database:h2' maven의 경우 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime 2. 데이터베이스 구성datasource의 url, driverClassName..
JSON parse error: Cannot deserialize value of type `java.util.ArrayList<>` from Object value (token `JsonToken.START_OBJECT`); 에러 전문은 아래와 같다.JSON parse error: Cannot deserialize value of type `java.util.ArrayList` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList` from Object value (token `JsonToken.START_OBJECT`) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream)..
@RequestBody에 DTO 사용 시 기본 생성자를 못 찾는 에러 Cannot construct instance of '...[DTO 위치]' 에러 발생에러 내용은 대충 기본 생성자를 못 찾는다는 소리다.아래가 문제의 DTOpackage com.example.demo.dto;import java.time.LocalDateTime;import java.util.List;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.ToString;@NoArgsConstructor@Getter@ToStringpublic class MeetingDto { private String topic; private int typ..
어노테이션을 이용해 메소드 인자로 세션값 바로 받기 @LoginUser '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' - 이동욱 지음 위의 책 일부를 공부용으로 정리한 내용입니다. 컨트롤러에서 로그인한 유저의 세션값을 가져오기 위해 아래 코드를 작성해야한다. SessionUser User = (SessionUser) httpSession.getAttribute("user"); 같은 코드가 반복되는 것을 피하기 위해 어노테이션을 통해 메소드 인자로 전달받는 형태로 변경하고자 한다. @LoginUser 어노테이션 생성 config.auth 패키지에 LoginUser 생성 package com.odog.www.config.auth; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; ..