포트폴리오/SPRINGBOOT 옛날

05 : Handling Exception

서버관리자 페페 2022. 10. 25. 16:49

메서드 위상에서 예외 처리 하는것은 throws를 사용

 

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional<SiteUser> _siteUser = this.userRepository.findByusername(username);
        if (_siteUser.isEmpty()) {
            throw new UsernameNotFoundException("사용자를 찾을수 없습니다.");
        }
        SiteUser siteUser = _siteUser.get();
        List<GrantedAuthority> authorities = new ArrayList<>();
        if ("admin".equals(username)) {
            authorities.add(new SimpleGrantedAuthority(UserRole.ADMIN.getValue()));
        } else {
            authorities.add(new SimpleGrantedAuthority(UserRole.USER.getValue()));
        }
        return new User(siteUser.getUsername(), siteUser.getPassword(), authorities);
    }
}

 

메서드 내부 액션에서

 

if > throw 사용

 

혹은 아래와 같이 try ~ catch를 사용

package com.mysite.sbb.user;

(... 생략 ...)
import org.springframework.dao.DataIntegrityViolationException;
(... 생략 ...)
public class UserController {

    (... 생략 ...)

    @PostMapping("/signup")
    public String signup(@Valid UserCreateForm userCreateForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "signup_form";
        }

        if (!userCreateForm.getPassword1().equals(userCreateForm.getPassword2())) {
            bindingResult.rejectValue("password2", "passwordInCorrect", 
                    "2개의 패스워드가 일치하지 않습니다.");
            return "signup_form";
        }

        try {
            userService.create(userCreateForm.getUsername(), 
                    userCreateForm.getEmail(), userCreateForm.getPassword1());
        }catch(DataIntegrityViolationException e) {
            e.printStackTrace();
            bindingResult.reject("signupFailed", "이미 등록된 사용자입니다.");
            return "signup_form";
        }catch(Exception e) {
            e.printStackTrace();
            bindingResult.reject("signupFailed", e.getMessage());
            return "signup_form";
        }

        return "redirect:/";
    }
}

사용자ID 또는 이메일 주소가 동일할 경우에는 DataIntegrityViolationException이

'포트폴리오 > SPRINGBOOT 옛날' 카테고리의 다른 글

07 : http 오류 코드  (0) 2022.10.25
06 : 생성자  (0) 2022.10.25
04 : ANNOTATION  (0) 2022.10.25
3-14 : 검색  (0) 2022.10.14
3-13 : 마크다운  (0) 2022.10.13