@NotNull VS @NotEmpty VS @NotBlank

  • @Notnull: null이 들어갈 경우 예외를 발생
  • @NotEmpty: 문자열이 null이나, ““가 들어가면 예외를 발생. NotNull의 문자열 버전 상위 호환
  • @NotBlank: 문자열에 null, “”, “ “가 들어가면 예외를 발생. NotEmpty 상위 호환

@NotEmpty랑 @NotBlank는 문자열에만 적용 가능 (참고로 Hibernate DDL 옵션 중 nullable=false가 있는데 위의 @NotNll로 대체가능하고, Hibernate에서도 @NotNull 사용을 권장하고 있다. nullable=false 대신 @NotNull을 추가해주면 DB DDL에도 not null을 추가해주고, DB에 데이터가 들어가기 전에 Entity 단에서 null을 방지할 수 있다. 하지만 @NotEmpty와 @NotBlank는 nullable=false 대신 사용해도, DDL에 not null을 추가해주지 않기 때문에 nullable=false를 대신할 수 없다.

@ModelAttribute

@RequestMapping이 url을 Query String에 있는 문자열을 일치하는 변수와 매핑해준다. Query String이 한 두개라면 괜찮겠지만, 그 이상을 넘어간다면, Controller method parameter에 일일이 @RequestParam으로 매핑을 해줘야 하는 수고로움을 감내해야 한다. 그럴 때 쓰는 게 @ModelAttribute인데, class을 만들어서 @ModelAttibute를 해주면, 객체의 멤버 변수와 Query String의 일치하는 변수들이 알아서 매핑이 된다. (@RequestMapping 어노테이션은 생략 가능) 또한, @ModelAttribute를 사용하면 자동으로 Model 객체에 값이 담기는데, 해당 값은 view 단에서 사용할 수가 있다. 만약 @ModelAttribute Temp temp로 controller 메서드 파라미터에서 받으면 뷰단에서도 temp라는 이름으로 접근해야 한다. (@ModelAttribute("test") Temp temp로도 사용이 가능한데, 이럴경우 뷰단에서는 test라는 객체로 접근해야 한다.)

댓글남기기