TIL220714

김선미·2022년 7월 15일
0
  • 프로젝트 구현

org.springframework.validation.BeanPropertyBindingResult

  • 에러 : 데이터를 전달할 때 String은 빈 값을 전달해도 크게 오류가 나지 않았는데 file 을 빈 값으로 전달하면서 오류가 났다.
  • 해결 : 검색을 하고 여러 설명을 읽어도 정확히 무슨 에러가 난건지 이해가 되지 않아서 튜터님께 질문을 하러 갔다. 알고보니 validation이란 스프링의 유효성 검사 기능이 작동한 것이었고 전혀 모르는 개념이었다. 코드를 잘못 입력한게 아니라 스프링의 구조 상 에러가 날 수 있다는 것, 스프링이 자동으로 여러가지 작업을 해주고 있다는 것을 알게 되었다.
@ResponseBody
@PostMapping(value = "/user/update_profile/{id}", consumes = 
{MediaType.MULTIPART_FORM_DATA_VALUE})
public UpdateUserResponseDto UpdateProfile(@PathVariable long
id, @Validated @ModelAttribute UpdateUserRequestDto 
updateUserRequestDto, BindingResult result)
throws IOException, NoSuchAlgorithmException {

UpdateUserResponseDto updateUserResponseDto = updateService.updateProfile(
id, updateUserRequestDto);

return updateUserResponseDto;
}

multipartfile은 빈 값으로 전송하면 데이터가 바인딩 되지 않아 바인딩 에러가 발생한다. 파라미터 변수로 BindingResult 타입의 bindingresult 를 추가하여 바인딩 에러 결과를 변수에 담아주어야 한다. bindingresult를 사용할 때 유효성 검사를 지시하는 @Valid 어노테이션을 같이 사용해야 하는데 @Valid를 사용할 수 없다는 인텔리제이 에러가 떠서 대신 @Validated와 @ModelAttribute를 추가하였다.


  • 프론트엔드 구현 문제 : 이미지 파일 선택시 파일명이 뜨게 하고 싶었는데 html에 form 태그가 아니라 span 태그를 사용하고있어서 해결이 잘 안된다.

강의를 들어서 이해하는거랑 실제로 구현하는거랑은 천지차이라는 생각이 들었다. 예외처리도 실제로 해보니까 어느 코드에 예외처리를 해주어야하는지 찾아보는게 재미있었다. 많은걸 배울수있는 프로젝트 기간이 너무 좋고 더 열심히 해야겠다.

profile
백엔드 개발 공부

0개의 댓글