전체 글
-
[Spring-Error] @NotBlank 검증 오류, No validator could be foundlegacy/Spring 2023. 7. 6. 22:17
문제 발생 @NotBlank @Range(min=10, max=100) private Integer userAge; 필드에 @NotBlank을 사용하였는데 다음과 같은 오류를 발생시켰다. No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Integer'. Check configuration for 'userAge' 보아하니 @NotBlank 애너테이션에 문제가 있어 보인다. 해결 일단 @NotBlank의 역할은 "", " ", null 세 개를 허용하지 않는다. 생각해보니 userAge 필드는 Integer 타입이다. Integer 타입은 애초에 문자열이 들어..
-
[Spring] Validator 2개 이상 등록하기legacy/Spring 2023. 7. 6. 20:52
1개의 Controller에서 2개 이상의 Validator를 등록하려면 어떻게 해야 할까? WebDataBinder의 addValidators()에 그냥 2개를 저장하면 될까? 바로 알아보자. 오류 코드 나는 회원가입용 검증기와 로그인용 검증기 2개를 등록하려고 하였다. 처음에 WebDataBinder에 2개를 바로 저장하였다. 참고로 registerValidator와 loginValidator는 주입받은 상태이다. // Controller @InitBinder public void init(WebDataBinder webDataBinder) { webDataBinder.addValidators(registerValidator, loginValidator); } 그러나 바로 IllegalStateExc..
-
[Spring-Error] Field Error 오류, 객체 바인딩 문제legacy/Spring 2023. 7. 6. 17:42
문제 발생 BindingResult에 필드 오류를 저장하여 View에 오류를 출력하려고 했는데 오류가 발생했다. 일단 코드를 확인하자. LoginUser @Data public class LoginUser { private String loginId; private String loginPassword; public LoginUser() { } } Controller @GetMapping("/login") public String login(Model model) { model.addAttribute("user", new LoginUser()); return "/login"; } @PostMapping("/login") public String loginCheck(LoginUser user, Bindin..
-
[Spring-Error] Global Error 출력이 안되는 문제legacy/Spring 2023. 7. 6. 16:31
문제 발생 회원가입 로직에 BindingResult를 사용하여 오류를 처리하고 있었다. Global Error가 정상적으로 작동하는지 테스트를 하려고 다음과 같이 로직을 작성했다. Controller @PostMapping("/register") public String checkRegister(User user, BindingResult bindingResult, RedirectAttributes redirectAttributes) { if(user.getUserName() == "" || user.getUserName() == null) { bindingResult.rejectValue("loginId", "required"); } if(user.getLoginPassword() == "" || us..
-
[Spring] RowMapper<T> mapRow(), ResultSet를 객체로 반환legacy/Spring 2023. 7. 4. 14:39
JdbcTemplate를 사용하다 보면 RowMapper 인터페이스를 본 적이 있을 것이다. 자세히 알고 쓰지 않으면 잘못된 사용을 할 수도 있으니 주의하자 JdbcTemplate 사용 전 우리는 지금까지 DB에 select문을 날려서 결과 값으로 ResultSet을 받아서 사용해 왔었다. 아래와 코드를 확인하자. ResultSet 사용 public Member findById(String memberId) throws SQLException { String sql = "select * from member where member_id = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { 생략... ..
-
[Spring] JdbcTemplate DB 반복 작업 제거legacy/Spring 2023. 7. 4. 14:03
기존에 우리는 Jdbc를 통해 아래 과정을 거쳤다 커넥션 생성 및 동기화 PreparedStatement 생성 ResultSet 생성 (쿼리 실행 결과) SQLExceptionTranslator를 통해 체크 예외 -> 언체크 예외 리소스 반환(종료) DB에 저장, 조회, 삭제, 수정 즉 CRUD를 수행할 때마다 반복적인 작업을 거쳤다. JdbcTemplate은 위와 같은 반복 작업을 제거해준다. JdbcTemplate 생성 JdbcTemplate 클래스는 생성자로 DataSource를 넘겨줘야 한다. DataSource의 경우에는 Jdbc를 통하여 직접 가져오거나 커넥션풀을 사용하거나 해서 가져오면 된다. (커넥션풀 구현체로 HikariCP를 주로 사용한다고 한다) JdbcTemplate jdbcTemp..