브라우저에서는 잘 동작하는데 IDE에서는 에러가 뜬다.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.github.jknack.handlebars.context.MemberValueResolver (file:/Users/kimnayeon/.gradle/caches/modules-2/files-2.1/com.github.jknack/handlebars/4.2.0/116306614fd4d250af27fe1ef48665e7830fc10b/handlebars-4.2.0.jar) to method java.util.Collections$EmptyMap.isEmpty()
WARNING: Please consider reporting this to the maintainers of com.github.jknack.handlebars.context.MemberValueResolver
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
→ 슬랙에 파이로가 같은 문제를 마주한걸 올렸는데 제인이 얘기해준대로 자바 8로 설정하니 해결
아래 블로그 참고
[SpringBoot] @Bean, @Configuration, @Component 어노테이션
Spring Bean이란?
Spring Bean 구성 요소
@Configuration어노테이션
@Bean 어노테이션
@Component 어노테이션
@Configuration
public class MyConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry){
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
registry.addViewController("/user/create").setViewName("user/form");
registry.addViewController("/user/login").setViewName("user/login");
registry.addViewController("/qna/create").setViewName("qna/form");
}
}
마주한 문제
회원가입 부분에서 form 양식을 기입하면 PostMapping 이 잘 동작했는데 미션1을 진행하다가 405 에러가 떴다. 구글링하면 해당메소드에 Post 방식을 추가해주고 form태그에서 method랑 action 속성 지정해주는 이야기만 있는데 이부분은 이전에 잘 지정해줘서 문제가 없는 부분이고, 시큐리티 이야기도 있는데 내게 해당되는 내용은 아닌거같았다. 원인이 뭔지 모르고 헤매다가 그룹에 공유를 했는데 조원분들이 도와줘서 해결되었다.
원인은 MyConfig 클래스에서 아래 url과
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
registry.addViewController("/users/create").setViewName("user/form");
UserController 클래스의 아래 부분의 url이 겹쳐서 발생한 문제였다.
@PostMapping("/users/create")
public String create(User user) {
System.out.println("user : " + user);
users.add(user);
return "redirect:/users";
}
위에 코드의 registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
이 부분이 순서를 지정해주는 건데 @Controller 부분보다 제일 먼저 실행된다는 의미여서 발생한 문제였다. 정확히 설명하지는 못하겠지만 대충 어떤 느낌인지 감으로만 알겠다.
@PostMapping 애노테이션에 써주는 URL은 html파일의 form태그의 action 에 써주는 URL과 연결되는 것이다. 해당html에서 받은 데이터를 서버로 전송하는게 post 방식인가보다.
html에서 템플릿 엔진 문법은 무조건 {{ }} 중괄호 두개로 감싸주기
모든 view를 접근할때는 무조건 controller를 통해서 접근해야한다.
연선생님 구글검색으로 타고들어왔습니다
Illegal reflective access by com.github.jknack.handlebars.context.MemberValueResolver
해결책 공유 감사합니다