[SPRING] Spring MVC - REST 서비스의 빈리스트에 @Valid
SPRINGSpring MVC - REST 서비스의 빈리스트에 @Valid
Spring MVC REST 서비스 (json)에서는 다음과 같은 컨트롤러 메소드가있다.
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
MyBean 클래스에 bean 유효성 검사 주석이있는 곳.
유효성 검사는이 경우에는 발생하지 않지만 다른 컨트롤러에서는 유효합니다.
json 입력을 변경하는 목록에이 목록을 캡슐화하고 싶지 않습니다.
콩 목록에 대한 유효성 검사가없는 이유는 무엇입니까? 대안은 무엇입니까?
해결법
-
==============================
1.@Valid는 JSR-303 주석이며 JSR-303은 JavaBeans의 유효성 검사에 적용됩니다. java.util.List는 (JavaBean의 공식적인 설명에 따라) JavaBean이 아니므로 JSR-303 준수 검사기를 사용하여 직접 유효성을 검사 할 수 없습니다. 이것은 두 가지 관찰에 의해 뒷받침된다.
@Valid는 JSR-303 주석이며 JSR-303은 JavaBeans의 유효성 검사에 적용됩니다. java.util.List는 (JavaBean의 공식적인 설명에 따라) JavaBean이 아니므로 JSR-303 준수 검사기를 사용하여 직접 유효성을 검사 할 수 없습니다. 이것은 두 가지 관찰에 의해 뒷받침된다.
-
==============================
2.이 작업을 수행 할 수있는 유일한 방법은 목록을 래핑하는 것입니다. 이는 또한 JSON 입력을 변경해야한다는 것을 의미합니다.
이 작업을 수행 할 수있는 유일한 방법은 목록을 래핑하는 것입니다. 이는 또한 JSON 입력을 변경해야한다는 것을 의미합니다.
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" }) @ResponseBody public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
다음과 같이됩니다.
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" }) @ResponseBody public List<...> myMethod(@Valid @RequestBody MyBeanList request, BindingResult bindingResult) {
우리는 또한 다음을 필요로합니다.
import javax.validation.Valid; import java.util.List; public class MyBeanList { @Valid List<MyBean> list; //getters and setters.... }
이것은 목록에 대한 사용자 정의 유효성 검사기로도 가능할 수 있지만 아직까지는 얻지 못했던 것처럼 보입니다.
참조 : http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
-
==============================
3.직접 검증을 시도하십시오. 이 같은:
직접 검증을 시도하십시오. 이 같은:
@Autowired Validator validator; @RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" }) @ResponseBody public Object myMethod(@RequestBody List<Object> request, BindingResult bindingResult) { for (int i = 0; i < request.size(); i++) { Object o = request.get(i); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(o, String.format("o[%d]", i)); validator.validate(o, errors); if (errors.hasErrors()) bindingResult.addAllErrors(errors); } if (bindingResult.hasErrors()) ...
-
==============================
4.org.springframework.validation.beanvalidation.LocalValidatorFactoryBean을 멤버로 사용하여 사용자 정의 유효성 검사기를 구현하고 각 항목에 대한 유효성 검사기를 호출하십시오.
org.springframework.validation.beanvalidation.LocalValidatorFactoryBean을 멤버로 사용하여 사용자 정의 유효성 검사기를 구현하고 각 항목에 대한 유효성 검사기를 호출하십시오.
public class CheckOutValidator implements Validator { private Validator validator; @Override public void validate(Object target, Errors errors) { List request = (List) target; Iterator it = request.iterator() while(it.hasNext()) { MyBean b = it.next(); validator.validate(b, errors); } } //setters and getters }
-
==============================
5.List와 JavaBean의 역할을하는 커스텀 java.util.List에서 요청을 감싸는 우아한 방법이있다. 여길 봐
List와 JavaBean의 역할을하는 커스텀 java.util.List에서 요청을 감싸는 우아한 방법이있다. 여길 봐
-
==============================
6.가지고있는 각 List에 대해 래퍼를 쓰고 싶지 않다면 일반 래퍼를 사용할 수 있습니다 :
가지고있는 각 List에 대해 래퍼를 쓰고 싶지 않다면 일반 래퍼를 사용할 수 있습니다 :
public class ListWrapper<E> { private List<E> list; public ListWrapper() { list = new ArrayList<>(); } public ListWrapper(List<E> list) { this.list = list; } @Valid public List<E> getList() { return list; } public void setList(List<E> list) { this.list = list; } public boolean add(E e) { return list.add(e); } public void clear() { list.clear(); } }
-
==============================
7.가장 좋은 방법은 목록을 래핑하는 것입니다 - Spring MVC에서 Bean이 아닌 요청 매개 변수의 유효성을 검사하는 방법은 무엇입니까?
가장 좋은 방법은 목록을 래핑하는 것입니다 - Spring MVC에서 Bean이 아닌 요청 매개 변수의 유효성을 검사하는 방법은 무엇입니까?
@Valid가 컬렉션 요소에 적용된다고 말하는 방법은 없습니다.
from https://stackoverflow.com/questions/17207766/spring-mvc-valid-on-list-of-beans-in-rest-service by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 : Apache Commons FileUpload를 사용하는 대규모 스트리밍 파일 업로드 (0) | 2018.12.23 |
---|---|
[SPRING] applicationContext가 서블릿 컨텍스트에 대한 컨트롤러를 찾지 못했습니다. (0) | 2018.12.23 |
[SPRING] autowired 종속성의 주입이 실패했습니다. (0) | 2018.12.23 |
[SPRING] Spring REST Service : json 응답에서 null 객체를 제거하도록 구성하는 방법 (0) | 2018.12.23 |
[SPRING] 모든 컨트롤러와 매핑을보기에 표시하는 방법 (0) | 2018.12.23 |