✏️ 발단
- 타임리프를 사용해 웹 페이지를 만들던중 폼을 만들 때 페이지에 접속하면 400 오류가 발생하는 현상이 나타났다.
- web 에 나타난 에러 메시지
There was an unexpected error (type=Bad Request, status=400).
Validation failed for object='likeableAddForm'. Error count: 1
org.springframework.web.method.annotation.ModelAttributeMethodProcessor$1:
Validation failed for argument [0] in public java.lang.String
com.lldj.gram.boundedContext.likeable.LikeableController.addLike(com.lldj.gram.boundedContext.likeable.form.LikeableAddForm):
[Field error in object 'likeableAddForm' on field 'attractiveCode':
rejected value [null]; codes
- intellij 콘솔에서 나타난 경고 로그
- 메시지를 차근차근 살펴보니 form 전달용 객체의
attractiveCode
필드에서 Null 이 발생되고있다는 의미 같았다.
Resolved [org.springframework.web.method.annotation.ModelAttributeMethodProcessor$1:
Validation failed for argument [0] in public java.lang.String com.lldj.gram.boundedContext.likeable.LikeableController.addLike(com.lldj.gram.boundedContext.likeable.form.LikeableAddForm):
[Field error in object 'likeableAddForm' on field 'attractiveCode':
rejected value [null]; codes [typeMismatch.likeableAddForm.attractiveCode,typeMismatch.attractiveCode,typeMismatch.int,typeMismatch];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [likeableAddForm.attractiveCode,attractiveCode];
arguments []; default message [attractiveCode]];
default message [Failed to convert value of type 'null' to required type 'int';
Failed to convert from type [null] to type [@jakarta.validation.constraints.NotBlank @jakarta.validation.constraints.Size int] for value 'null']] ]
package com.lldj.gram.boundedContext.likeable.form;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class LikeableAddForm {
@NotBlank
@Size(min = 4, max = 10)
private String instagramName;
@NotBlank
@Size(min = 1, max = 1)
private int attractiveCode;
}
✏️ 원인
- 폼객체 자체엔 문제가 없어보였다.
- 참고로
attractiveCode
는 라디오 버튼에서 값을 받아올 필드이다.
- 처음에는
attractive
라는 필드명을 사용했는데 이 필드명이 사용 불가능한 필드명인가?
라고 생각해 attractiveCode
로 필드명을 바꿨는데도 해결되지 않았다.
- 알고보니 원인은 데이터타입에 있었다.
attractiveCode
의 타입은 Int
로 선언되어있는데 int
는 null 을 담을 수 없기때문이다.
✏️ 문제 해결
- 타입을
int
에서 Integer
로 바꿔주니 정상적으로 실행이 되었다.
⚠️ 이렇게 수정하고 처리 method 를 생성할경우 발생되는 예외