목요일에도 어쩌다보니 다른 분 에러 잡는 걸 도와드리다 TIL를 못 적고 잠들었다,, 늦었지만 오늘이라도 어제의 기억을 되살리며 써보려 한다!!
일단 어제 에러를 어떻게 해결했는지부터 간단하게 적어보겠다:)
1. postman으로 boolean 값을 계속 날려도 계속 false만 찍힐 때
클라이언트에 요청을 보낼 때 boolean 타입의 isAdmin 변수를 requestDto에 담아서 보냈는데 postman에서 true를 적든 false를 적든 service 쪽에서 받아오는 것을 확인해보면 항상 false만 찍혔었다.
@Getter
public class SignupRequestDto {
@NotNull
@Pattern(regexp = "^[a-z0-9]{4,10}$")
private String username;
@NotNull
@Pattern(regexp = "^[a-zA-Z0-9`~!@#$%^&*()-_=+]{8,15}$")
private String password;
private boolean isAdmin; //여기!!!
private String adminToken;
}
근데 boolean 타입이 아니라 int나 string 등 다른 타입으로 요청 받으면 값을 잘 받아왔었다.
boolean 타입만 제대로 값을 못 가져왔던 이유:
lombok과 같은 어플리케이션으로 getter/setter를 생성할 때에는 boolean 필드 이름에 "is"를 쓰지 않는 것이 맞다고 한다. jackson의 자바 bean 네이밍 규칙이라고 한다.
그래서 isAdmin을 checkAdmin이라고 변수 이름을 바꿨더니 값을 잘 받아왔다.
그리고 service쪽에서 getter를 불러왔을 때도 확인해보니 이런 식으로 메서드를 호출하였다.
//일반 getter 메소드:
//이런 식으로 변수명의 첫 문자를 대문자로 바꾸고 앞에 get을 붙여준다.
String username = requestDto.getUsername();
//boolean 타입의 getter 메소드:
//변수명의 첫 문자를 대문자로 바꾸고 앞에 is를 붙여준다.
boolean checkAdmin = requestDto.isCheckAdmin()
2. JPA 오류: Unable to locate Attribute with the the given name [id] on this ManagedType 에러
스프링 서버를 실행 하면 bean 에러가 엄청 많이 뜨는데 한참 헤매다가 결국 위와 같은 메시지가 핵심인 것 같아서 찾아보니 이 역시도 변수 이름을 잘못 써서 나온 에러였다... 거창하게 bean configuration error라고 길~게 에러가 나왔지만...
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
...
}
위와 같이 변수명은 id가 아니라 Id로 넣어줘서 생긴 문제였다,,ㅎㅎ
JPA를 사용할 때는 자바의 변수명으로 매핑하기 때문에 변수명을 오타없이 주의해서 작성해야 한다!
-끄읕-