Spring (13) 썸네일형 리스트형 Spring MissingServletRequestParameterException: Required String parameter '~~' is not present 오류 해결 org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter '~~' is not present 오류 해결 상황 api를 호출하면서 에러가 발생했다. @DeleteMapping(value = "/viewCategoryTemplate/{categoryNo}") public ApiResponseWrapper deleteTeam(@RequestParam(value = "teamNo") Long teamNo) { return teamService.deleteTeam(teamNo); } 똑같은 형태면서 POST로 호출하는 것은 잘 되었으나, DELETE로 호출하는 것은 에러가 났다. 인터넷을 찾아보니 넘.. IntelliJ Cannot find symbol 에러, dependencies 빨간 줄 해결 IntelliJ Cannot find symbol 에러, dependencies 빨간 줄 해결 잘 돌아가던 프로젝트고, 안 돌아갈리가 없는데도 Cannot find symbol 에러가 뜨면서 Dependencies에 빨간 줄이 좍좍 가있는 경우가 있다. 이렇게... 이 화면은 intellij 우상단 maven -> 프로젝트명 -> Dependencies를 클릭했을 때의 화면이다. 이런 에러가 발생했을 때, 나의 경우는 모두 maven 프로젝트였다. gradle 프로젝트에서도 이 에러가 자주 발생하나 해결 방법은 통하지 않을 수도 있다... 내가 해결한 방법 intellij 우상단 Maven -> 프로젝트명 우클릭 -> Reload project 이 외에 인터넷에서 보이는 해결 방법은 아래와 같지만 나는 .. Spring의 싱글톤 빈이 무상태여야 하는 이유 Spring의 싱글톤 빈이 무상태여야 하는 이유 자바의 메모리 구조 Method Area, Heap, Stack, PC Register, Native Method Stack이 있다 Method Area는 C에서의 코드(텍스트) 영역과 데이터 영역이 합쳐진 느낌?(내 생각) 클래서 정보, 전역 변수, static 변수의 정보가 저장된다 모든 스레드에 정보가 공유된다. Heap은 런타임 중 동적으로 할당되는 부분이며 가비지 컬렉터가 여기에 있는 사용하지 않는 값을 제거한다. 모든 스레드에 정보가 공유된다. Stack에는 지역변수가 저장된다. 스레드마다 각각 존재하기 때문에 스레드에 정보가 공유되지 않는다. 스프링으로 여러 요청이 동시에 들어오면? 톰캣은 스레드풀을 미리 만들어놓는다 그리고 요청이 들어올 때 .. @RequestParam 사용법과 생략 @ReqeustParam 사용법 public String test(@RequestParam(value="name") String name) { ... } @RequestParam 사용법은 위와 같다. 파라미터로 받아올 키를 value로 지정해준다. 예를 들면 파라미터: ?name=kim 이렇게 요청이 오면 변수 name에는 kim이 들어간다. 여기에서 value를 생략할 수 있다. public String test(@RequestParam(value="name") String name) { ... } public String test(@RequestParam("name") String name) { ... } public String test(@RequestParam String name) { ... }.. org.apache.ibatis.executor.ExecutorException : No constructor found in ~ 에러 해결 상황 org.mybatis.spring.MyBatisSystemException:nested exception is org.apache.ibatis.executor.ExecutorException : No constructor found in ~ 해결 디폴트 생성자가 없어서 생기는 오류 @NoArgsConstructor를 클래스에 붙여주거나 직접 디폴트 생성자를 만들어주면 된다. public class Car { public Car() {} } 디폴트 생성자는 위처럼 만들어주면 되며 @NoArgsConstructor는 이 디폴트 생성자를 자동으로 만들어준다. 참고 https://doing7.tistory.com/8 assertThat() import가 안 될 때 해결 상황 IntelliJ에서 assertThat을 사용하려고 하는 상황. assertThat을 import를 시키기 위해 alt + enter 를 눌렀는데 내가 원하는 선택지가 나오지 않는다. 해결 assertThat에 ()를 붙여 assertThat()으로 작성한 뒤에 alt + enter를 누른다. mac은 option + enter 를 누르면 된다. 근데 나는 키보드 커서를 assertThat과 ()의 사이에 두고 단축키를 눌러야 저렇게 뜨더라...;; 참고 https://shinsunyoung.tistory.com/87 Could not find org.projectlombok:lombok:.Required by: project : 에러 해결 Could not find org.projectlombok:lombok:. Required by: project : Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html 위 에러를 해결해보자 상황 dependencies { ... implementation 'org.projectlombok:lombok' } 해결 dependencies { ... implementation 'org.projectlombok:lombok:1.18.22' } 이렇게 버전을 추가해주면 해결된다. 참고.. Spring에서 Feign 사용하기 Feign Netflix에서 개발된 http client binder이다. interface, annotation 작성만 하면 되므로 비교적 간단하게 구현할 수 있다. 동기 방식으로 동작한다. 시작하기 dependency build.gradle implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' pom.xml org.springframework.cloud spring-cloud-starter-openfeign 2.1.3.RELEASE Application.java @SpringBootApplication @EnableFeignClients public class Application extends SpringBootServl.. JPA JPQL 파라미터 객체(Object)로 한 번에 넘기기 파라미터의 수가 많아지는 경우, 객체로 한 번에 넘기는 것이 편해보였다. 기존 코드 @Query(value = "SELECT s " + "FROM Student s " + "LEFT JOIN s.team t " + "WHERE current_timestamp BETWEEN t.startDate AND t.endDate " + "AND t.category_id IN :category_id " + "AND t.is_public = :isPublic") List find(@Param("categoryList") List categoryList, @Param("isPublic") Flag isPublic); 위의 코드는 파라미터의 수가 적지만.. 실제 코드에서는 쿼리도 복잡해지고 파라미터도 점점 많아지고 있던 .. JPA ConverterNotFoundException: No converter found capable of converting from type 에러 해결 ConverterNotFoundException: No converter found capable of converting from type 문제 상황 @Query(nativeQuery = true, value = "SELECT s.id, s.email, s.name " + "FROM student s " + "LEFT OUTER JOIN team t ON s.team_id = t.id " + "WHERE now() BETWEEN t.start_date AND t.end_date " + "AND t.category_id IN :categoryList " + "AND t.is_public = :isPublic") List find(@Param("categoryList") List categoryList, .. 이전 1 2 다음