ã¢ããã¼ã·ã§ã³ã@Validatedãã¨ã@Validã
BeanValidation(JSR-303)ã®ã¢ããã¼ã·ã§ã³ã¨ãã¦ã@Validããããã¾ãããããã¯ãSpring MVCã§Controllerã§Commandã«å¯¾ãã¦å¤ãæ¤è¨¼ãããå ´åã«å©ç¨ã§ãã¾ãã
ã¾ããSpringèªä½ã«ãä¼¼ãã¢ããã¼ã·ã§ã³ã@Validatedãï¼org.springframework.validation.annotation.Validatedï¼ãåå¨ãã¾ãã
ãã ãã@Validatedã¯ãSpring3.1ãã追å ããããã®ã§ãã
éãã¯ãSpringã®ã@Validatedãã§ã¯ãã°ã«ã¼ããæå®ã§ããã¨ãããã¨ã§ãã
Spring MVCã§ã¯ãé常ã¯ã@Validatedãã使ç¨ããã¹ãã§ãããå
¬å¼ã®ããã¥ã¢ã«ãè¦ãã¨ã@Validatedã§ã¯ãªã@Validã§ãµã³ãã«ã説æããã¦ãã¾ãã
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.validation.annotation.Validated; import org.springframework.web.servlet.ModelAndView; // Springã®@Validatedã¯ãã°ã«ã¼ããæå®ã§ãã¾ãã @Controller public class SampleController { @RequestMapping(value="/search") public ModelAndView search( @ModelAttribute @Validated(Group1.class) SearchCondition command) { ã»ã»ã» } }
ãã¨ãã¨ãBeanValidationã®@Validã®ç¨éã¨ãã¦ã¯ãJavaBeanãããããã£ã«æã¤ãã¹ãããã¯ã©ã¹ãæ¤è¨¼å¯¾è±¡ã¨ããããã®ãã®ã§ãã
ãã®ãããSpring MVCã®Controllerã®å¼æ°ã®Commandã«å¯¾ãã¦æ¤è¨¼ãè¡ãå ´åã¯ãæ¬æ¥ã¯Springã®ã@Validatedãã使ç¨ãã¹ãã§ãã
ãã ãã徿¥ã®ç¨éã§ãããã¹ãããã¯ã©ã¹ãæ¤è¨¼ãããå ´åã¯ãBean Validationã®@Validã使ç¨ããå¿ è¦ãããã¾ãã
// BeanValidationã®@Validã®ä½¿ç¨ä¾ public interface Complete extends Default {} public interface BasicPostal {} public interface FullPostal extends BasicPostal {} public class Address { @NotNull(groups=BasicPostal.class) String street1; String street2; @ZipCode(groups=BasicPostal.class) String zipCode; @CodeChecker(groups=FullPostal.class) String doorCode; } public class User { // @Validã¯ãã¹ãããã¯ã©ã¹ãæ¤è¨¼å¯¾è±¡ã¨ããããã®ãã® @Valid @ConvertGroup.List( { @ConvertGroup(from=Default.class, to=BasicPostal.class), @ConvertGroup(from=Complete.class, to=FullPostal.class) } ) Set<Address> getAddresses() { [...] } }