Spring MVC 의 미삭 서비스 (json), I have a 컨트롤러거 이와 같은 방법을.
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
여기서 마이콩 클래스에는 콩 검증 주석입니다.
왜 없는 목록은 validations 콩? 대체 어떤 것이 있습니까?
자바빈즈 대한 검증 '은' @Valid jsr 303 주석 및 jsr 303 적용됩니다. 'A' 가 아닌 제바스티라자리스트 자바빈 (따르면 [공식 설명] (https://docs.oracle.com/javaee/5/tutorial/doc/bnair.html) 는 자바빈), 따라서 이는 호환일 문법검사기 jsr 303 사용하여 직접 확인할 수 없습니다. 이는 지원하는 두 개의 발견.
>. [Jsr 303 사양명세] (http://download.oracle.com/otn-pub/jcp/bean_validation-1.0-fr-oth-jspec/bean_validation-1_0-final-spec.pdf? 오스파람 = 1456457081_36abb9cf126ac00192b03d69d2af0874) 의 단면 3.1.3 것이라고 말했습니다.
>. 지원할 뿐 아니라 인스턴스입니다 객체 그래프를 검증, 검증 역시 지원됩니다. 그 결과 그래프란다 검증 반환됨 통합된 위반) 로 구속 콩 X 가 Y 현장 상황을 고려해보십시오 유형의 . 가 검증하십시오 @Valid 주석, 주석 달기 의해 함께 현장 Y 는 X 는 Y (및 속성에) 때 문법검사기 검증됨 . 정확한 문자 Z 값이 선언된 필드에 포함된 문자 Y (하위 클래스, 구축상의) 판별됩니다 dell. 런타임용으로 개발하십시오. 구속 정의는 Z 가 사용됩니다. 이렇게 하면 비헤이비어를 연관입니다 선택함 @Valid. 대한 적절한 다형성
>. 이트레이블 소중한 어레이입니다 소중한 취합은, 일반적으로 필드 및 속성 및 주석 @valid 함께 데코레이팅된 수도 있습니다. 이로 인해 컨텐트에서 반복자가 스크램블된 검증됨. 모든 객체에는 자바드란g. 구티에레이블 supported.* 구현할 수 있다.
나는 선택함 중요한 정보가 굵은체로. 이 섹션에서는 위해 수 있음을 말해주는 비디오함의 유형 내에 캡슐화됩니다 검증됨 비활성화해야 콩 (묵시적 상황은 고려해보십시오 콩 X 가 Y '필드의 유형에 의해'); 더 나아가 직접 확인할 수 없는 그 컬렉션 (의해 함축된 '소중한 취합은, 소중한 어레이입니다, 일반적으로 이트레이블 필드 및 속성 속성 , 필드 및 강조한' 데코레이팅된 수도 있습니다).
>. 실제 jsr 303 구현
나는 [샘플 애플리케이션] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/17207766) 을 모두 갖춘 취합은 검증 테스트 및 Apache 콩 최대 절전 모드 문법검사기 문법검사기. 이 같은 검사를 마프너 test - 청소하십시오 샘플링합니다 실행할 경우 '와' 마프너 test - 파파시 청소하십시오 필버네이트 ' (함께 최대 절전 모드 문법검사기)' 컬렉션을 직접 확인할 수 있는 것은 모두 (예를 콩 문법검사기) 에 맞춰 사양명세 것으로 보인다. 이후 문법검사기 는 최대 절전 모드 참조 구현 할 수 있는 증거가 컬렉션을 위해, 이 샘플은 jsr 303 더 볶아 캡슐화됩니다 처리를 위해 검증됨.
또한 설계 문제 있는 클리어런스됩니다, 내가 그렇게 말할 수 있는 방법을 직접 전달하는 방법을 위해 노력하고 있는 취합은 컨트롤러거 표시된 질문이예요 이 경우에도 validations 진행할 수 있는 방법, 다른 데이터 표현을 사용할 수 없게 컨트롤러거 컬렉션을 직접 XML EDI, 구글 등 사용자 정의, 비누, 아톰, 버퍼 등을 직접 매핑할 수 없는 프로토콜 모음. 해당 객체를 지원하기 위한 표현, 컨트롤러 수락하고 반품하십시오 인스턴스입니다. 컬렉션 내의 객체에는 인스턴스입니다 캡슐화 하는 방식으로. 따라서 이를 잡기 '매우' 목록 안에 다른 답을 로케이터로 제안했다고 다른 것이 좋습니다.
이를 위해서는 찾을 수 있는 유일한 방법은 내가 이 목록에 있는 랩 또한, , 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....
}
이 looks like it 에 대한 사용자 정의 발리다티어 수도 있다 하지만 난 아직 잡을라는데 않은 훨씬 열거합니다 가능합니다.
>. 이 과정에서 빈 표준 API, 검증 @Valid 주석이 jsr 303 chunghwa 특정 봄 아닙니다. >. Spring MVC 가 검증 @Valid 객체에는 표시됨과 너무 긴 바인딩한 후 적절한 문법검사기 구성했는지.
참조: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
코맥구글레스코먼스콜레스윈포워딩리스트 사용하여
public class ValidList<T> extends ForwardingList<T> {
private List<@Valid T> list;
public ValidList() {
this(new ArrayList<>());
}
public ValidList(List<@Valid T> list) {
this.list = list;
}
@Override
protected List<T> delegate() {
return list;
}
/** Exposed for the {@link javax.validation.Validator} to access the list path */
public List<T> getList() {
return list;
}
}
그래서 이 래퍼 필요 없습니다.
사용할 수 있습니다.
@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody ValidList<MyBean> request, BindingResult bindingResult) {
래퍼 너회의 JSON 변경해야 사용하여
{
"list": []
}
이를 통해 기존 JSON 구축상의 사용할 수 있습니다.
[]
종료기 직접판매용 검증. 이 같은 일이.
@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())
...
그 외의 문법검사기 멤버로 함께 자신의 문법검사기 구현하십시오 오르g. 스프링프라임워k.발리다션.빈발리다션.로카르발리다토프스토이빈 및 각 항목에 대해.
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
}
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();
}
}
내 생각엔 최상의 방법은 잡기 목록 - https://stackoverflow.com/questions/16908689/how-to-validate-request-parameter-if-it-is-not-a-bean-in-spring-mvc
Atm 있다고 할 수 있는 방법이 없다고 @Valid qic 요소를 뜻한다.
@Valid @RequestBody List<MyBean> request
이렇게 오래 제출할 때 가져다줄래요 작동됨 유효함 json -
[
{
"property1": "value1",
"property2": "value2"
},
{
"property1": "value3",
"property2": "value4"
}
]