본문 바로가기
반응형

전체 글216

QueryDSL select절에 subQuery 조회 join 하고 중복된 데이터를 제거하기 위해 select절에 서브 쿼리를 작성한다 fun findWithdrawMember(): List { return queryFactory.select( QWithdrawMemberList( member.id, JPAExpressions.select(memberToken.ipAddress).from(memberToken).where(memberToken.id.eq(member.id)).orderBy( memberToken.id.desc()).limit(1), member.createdAt.stringValue(), member.updatedAt.stringValue() ) ).distinct().from(member).leftJoin(memberToken).disti.. 2022. 12. 13.
[QueryDSL] 동적 쿼리 작성하기/BooleanBuilder, BooleanExpression 조건에 따라 쿼리문을 다르게 작성하고 싶을 때 쓰는 방법 - BooleanBuilder fun findDynamicQuery(name: String?, age: String?, phoneNumber: String?):List{ val builder = BooleanBuilder() if (!StringUtils.isNullOrEmpty(name)) builder.and(member.name.eq(name)) if (!StringUtils.isNullOrEmpty(age)) builder.and(member.age.eq(age)) if (!StringUtils.isNullOrEmpty(phoneNumber)) builder.and(member.phoneNumber.eq(phoneNumber)) return.. 2022. 12. 7.
Spring Boot REST API Key 만들어서 적용하기 특정 인증키를 사용하여 접근을 하도록 구현 APIKeyAuthFilter import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter import javax.servlet.http.HttpServletRequest class APIKeyAuthFilter(private val principalRequestHeader: String) : AbstractPreAuthenticatedProcessingFilter() { override fun getPreAuthenticatedPrincipal(request: HttpServletRequest): Any { return request.g.. 2022. 11. 15.
[Spring Boot] Interceptor로 토큰 검증 적용 중복된 토큰검증코드를 한 번에 검증하기 위해 Interceptor를 사용하였다 Interceptor는 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할을 한다 preHandle을 사용하여 컨트롤러가 호출되기 전에 토큰 검증을 하도록 구현하였다 HandlerInterceptor를 상속받는 AuthInterceptor를 구현한다. @NoArgsConstructor class AuthInterceptor :HandlerInterceptor { @Autowired lateinit var memberService: MemberService @Throws(Exception::class) override fun preHandle(request: HttpServ.. 2022. 11. 10.
[Spring Boot] AOP 적용하기 Gradle dependency 추가 implementation("org.springframework.boot:spring-boot-starter-aop") AOP를 활성하는 어노테이션 추가 Application 클래스에 추가해준다 @EnableAspectJAutoProxy @SpringBootApplication(exclude = [SecurityAutoConfiguration::class]) class Application fun main(args: Array) { runApplication(*args) } AOP를 처리하기 위한 어노테이션 import java.lang.annotation.ElementType import java.lang.annotation.RetentionPolicy @Targe.. 2022. 11. 1.
[Kotlin]CrossOrigin Annotation 여러 origin 사용 CrossOrigin 어노테이션을 사용하다가 한 개의 url이 아닌 여러 개의 url을 사용하는 일이 생겨서 찾아봄 한 개만 사용할 경우 @CrossOrigin("http://localhost:8080") 여러 개 사용할 경우 @CrossOrigin(value = ["http://localhost:8080","http://localhost:8000", "http://localhost:3000"]) 2022. 10. 31.
QueryDSL 결과 값이 Null인 경우 다른 값으로 할당 조회한 데이터의 값이 null 일 때 coalesce("대체할 값")을 사용하여 에러를 해결한다 queryFactory.select(member.name.coalesce("")) .from(members) .orderBy(member.id.desc()) .fetch() member 엔티티의 name 값이 null이 있으면 "" 빈 문자열로 출력 2022. 10. 28.
[Spring Boot] RestTmplate로 외부 API 통신하기: GET - header, parameter 아무것도 설정하지 않는 경우 fun getList(){ val url = "http://localhost:3000/~~" //외부 api 주소 val restTemplate = RestTemplate() val response = restTemplate.getForObject( url, String::class ) print(response) } Error: I/O error on GET request for http://localhost:3000~~~~ 라는 에러가 뜬다 해결하기 위해서는 gradle에 HttpComponentsClientHttpRequestFactory라이브러리를 추가해준다 https://mvnrepository.com/artifact/org.apa.. 2022. 10. 26.
[Kotlin] Enum 값으로 객체 Enum 객체 찾기 enum class Number(var code: Int, var ordinalNumber:String){ One(1,"First"), Two(2,"Second"), Three(3,"Third"), Four(4,"Fourth"), Five(5,"Fifth"), } fun fromCode(code: Int): Number { return Arrays.stream(Number.values()) .filter { v -> v.code == code } .findAny() .orElseThrow { IllegalArgumentException(String.format("%s이 존재하지 않습니다.", code)) } } 출력 println(fromCode(3).name) println(fromCode(3).ord.. 2022. 10. 12.
반응형