-
[SPRING] Controller에서 빈 문자열을 NULL로 받기
컨트롤러에서 파라미터를 받을 때, 전달 값이 없는 String이 null이 아니라 “” 로 올 때가 있다. 값이 없는 경우 Null로 받기를 원해서 찾아보니 여러가지 방법이 있었다. 그 방법들을 정리해본다. 하나의 컨트롤러보단 글로벌하게 설정하는 방향으로 접근했다. @InitBinder 컨트롤러에 사용하는 어노테이션으로 데이터가 바인딩 될 때 호출이 된다. 보통 사용을 원하는 컨트롤러에 개별적으로 설정하는데, 공통적으로 하고 싶다면 @ControllerAdvice 를 이용해서 설정하면 된다고 한다. @ControllerAdvice public class GlobalBinding{ @InitBin... Read More
-
[SPRING/JPA] JPA Example 사용 할 때 날짜 조건 포함하기
Spring data의 Example을 이용해서 검색을 주로 했는데 날짜를 조건으로 넣어야 하는 상황이 생겼다. 검색을 해보니 Example은 날짜에 대한 제어는 불가능해 보였고 Spring data의 Specification을 이용해서 구현하면 가능하다는걸 보았다. Specification Spring 블로그에 가보면 이렇게 설명이 되어있다. To be able to define reusable Predicates we introduced the Specification interface that is derived from concepts introduced in Eric Evans’ Domain... Read More
-
[JPA] Respository 만들 때 Not a managed type: class java.lang.Object 오류
오류 java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object JPA에서 공통으로 사용 할 repository를 만드려고 했을 때 해당 메세지가 발생했다. 공통 repository를 만들어서 특정 기능을 공유하려고 했다. public interface CommonRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> { default List<T> something(){ ... } ... Read More
-
[JAVA] Reflection을 이용해서 객체 인스턴스 생성하기
공통 기능 개발 중 불특정 객체에 대한 인스턴스를 생성해야 했다. 자바의 Reflection을 이용해서 인자값으로 들어온 타입의 인스턴스를 생성해주도록 했다. 해당 부분에 대해 정리해본다. 코드 기본 생성자로만 생성하도록 만들었다. public도 isAccessible이 false로 항상 나오는데 이 부분은 더 확인이 필요하다. private <T> T getNewInstance(Class<?> clazz){ try { Constructor<?> constructor = clazz.getDeclaredConstructor(); ... Read More
-
[SPRING/JPA] Generic을 이용해 entity의 repository 찾아보기
기능 개발 중 reflection을 통해서 특정 entity객체를 생성하고 해당 entity의 repository를 찾아서 select를 해야하는 상황이 있었다. 모든 repository는 JpaRepository를 상속받고 있었고, 개별적으로 만든 쿼리는 다행히 없었다. 단순하게 해당 repository의 구현체를 찾으면 되는것이라 JpaRepository 상속 시 입력한 generic을 통해 찾기로 했다. 1. JpaRepository list 받기 JpaRepository 목록을 한 번에 입력 받는건 List로 autowired 해주면 된다. 모든 타입을 받기 위해 와일드카드를 사용했다. @Ser... Read More