본문 바로가기
Spring/JPA + Security

[Spring] 회원 수정 에서 유효성 처리 하기 -2 DB에 없는 값

by pyogowoon 2023. 1. 8.

2가지 방법이 존재함, 1번은 람다식을 사용하지 않은경우 2번은 람다식

 

 

1. 람다식 비사용

@Transactional
public User 회원수정(int id, User user) {
        //1. 영속화
    User userEntity = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>(){

        @Override
        public IllegalArgumentException get() {
            return new IllegalArgumentException("찾을수 없는 id입니다.");
        }
    });

 

 

2.람다식 사용

 

@Transactional
public User 회원수정(int id, User user) {
    //1. 영속화
    User userEntity = userRepository.findById(id)
            .orElseThrow(() -> {
                return new IllegalArgumentException("존재하지 않는 아이디입니다.");
            });

 

그러나 우리는 custom한 validation이 있기 때문에 

 

@Transactional
public User 회원수정(int id, User user) {
    //1. 영속화
    User userEntity = userRepository.findById(10)
            .orElseThrow(() -> {
                return new CustomValidationApiException("찾을 수 없는 id입니다.");
            });

리턴을 CustomValidationApiException 으로 바꾼 후 

 

public class CustomValidationApiException extends RuntimeException {


    //객체를 구분할때
    private static final long serialVersionUID = 1L;


    private Map<String, String> errorMap;

    public CustomValidationApiException(String message) {
        super(message);
    }

    public CustomValidationApiException(String message, Map<String, String> errorMap) {
        super(message);
        this.errorMap = errorMap;
    }

    public Map<String, String> getErrorMap() {
        return errorMap;
    }
}

super(message); 만 가진 새로운 생성자를 만든다

-> 왜? 회원수정에서의 Exception은 data가 아닌 단순하게 id가 없다고 String만 보내면 되기 때문이다.

 

 

fail(error=>{ //Httpstatus 상태코드가 200번대가 아닐때 fail
    if(error.data == null){
        alert(error.responseJSON.message);
    }else{
      alert(JSON.stringify(error.responseJSON.data));
    }

 그렇기 때문에 js도 수정을 해줘야 한다. 원래 data를 담은 alert창을 띄웠기 때문에

담긴 data가 없는 지금 에러메세지는 단순 String 메세지로 보내면 되는것.

댓글