Validation failed for object - Form 전달 객체 null 오류

알파로그·2023년 4월 11일
0

Error

목록 보기
25/37
post-custom-banner

✏️ 발단

  • 타임리프를 사용해 웹 페이지를 만들던중 폼을 만들 때 페이지에 접속하면 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']] ]
  • 전달용 Form 객체
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 를 생성할경우 발생되는 예외

  • UnexpectedTypeException
    • 이 상태로 진행하게 되면 이런 예외를 만나게 된다.
    • 해결방법은 링크를 확인하면 된다.
    • 🔗 UnexpectedTypeException
profile
잘못된 내용 PR 환영
post-custom-banner

0개의 댓글