몇 가지 유효성 검사 규칙이있는 스프링 MVC 컨트롤러를 통해 기존 회사 개체를 편집하려고하는데 이상한 문제가있다. 유효성 검사는 @Valid를 사용하여 트리거됩니다.스프링 MVC의 @Valid가 존재하지 않는 폼 오류를 던지고있다.
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@Valid Company company, BindingResult result, SessionStatus status) {
if(result.hasErrors()) {
return view("edit");
} else {
companyService.saveCompany(company);
status.setComplete();
return redirect("?isSaved=true");
}
}
회사 개체에 대한 개별 유효성 검사는 단위 테스트를 통과합니다. 응용 프로그램의 다른 부분에서 사용하면 정상적으로 작동합니다. 그러나 폼 중 하나의 경우, Spring은 항상 "필드가 비어 있어서는 안됩니다"또는 "전화 번호 형식이 잘못되었습니다"와 같은 오류가 발생하지만 실제로는 데이터가 정확합니다.
이 상황에 대한 최악의 경우는이 코드가 1 년 넘게 사용되었다는 것입니다.이 코드는 단순한 "회사 정보 수정"화면 일뿐입니다. 갑자기 일이 멈췄습니다. 양식에 무엇을 제출했는지에 관계없이 Spring은 이러한 오류를 발생시킵니다.
잘못 될 수있는 모든 사항을 확인하고 다시 확인했습니다. 올바른 Company 개체를로드하고 있습니다. 올바른 값도 게시하고 있습니다. 전성 검사로서, 나는이 양식을 제출하면 난 정확한 오류 개체를 표시 : 당신이 볼 수 있듯이
Field error in object 'company' on field 'phoneNumber': rejected value [451-324-3232]; codes [Pattern.company.phoneNumber,Pattern.phoneNumber,Pattern.java.lang.String,Pattern]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [company.phoneNumber,phoneNumber]; arguments []; default message [phoneNumber],[Ljavax.validation.constraints.Pattern$Flag;@2c99f9,(\()?(\d){3}(\))?(\s|-)(\d){3}(\s|-)(\d){4}]; default message [Must be of the form: ###-###-####]
Field error in object 'company' on field 'name': rejected value [somewhere]; codes [NotEmpty.company.name,NotEmpty.name,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [company.name,name]; arguments []; default message [name]]; default message [Name may not be empty]
Field error in object 'company' on field 'address.address': rejected value [135431]; codes [NotEmpty.company.address.address,NotEmpty.address.address,NotEmpty.address,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [company.address.address,address.address]; arguments []; default message [address.address]]; default message [Address may not be empty]
는, 값이 올바른지를하지만, 어쨌든 오류를 던지고.
또한 회사 개체에는 ID가 있습니다. 손실되거나 빠지지 않습니다.
@Valid를 제거하면 모든 것이 작동합니다. 모든 값이 변경되므로 @Valid와 직접적인 관련이 있음을 알 수 있습니다. 근데 뭐?
나는 유효성 검사 규칙이 틀린 것이어야한다고 생각할지 모르지만 그렇지 않다. 누군가가 @NotEmpty 제약을 엉망으로 만들 수 있습니까?
이 입력란에 무엇을 입력해도 문제가되지 않습니다. 오류는 계속 발생합니다. 또한 이러한 유효성 검사를 독립적으로 테스트 할 때는 작동합니다. 사실 @Valid가 시스템의 다른 부분 (예 : 등록 가입 양식)의 Company 객체에 사용될 때도 마찬가지로 작동합니다.
그래서 작동하지 않는 부분은 회사 프로필 화면뿐입니다.
Spring-MVC가 이렇게하는 이유는 무엇입니까? 나는 완전히 상실하고있다. 나는이 문제를 일으키기 위해 내가 무슨 짓을했는지조차 모른다. 내가 단위를 변경하면서 어떤 단위/통합 테스트도 실패하지 않은 것처럼 보입니다. 나는이 스크린을 수동으로 시도하기 전까지는 문제가 있다는 것을 절대 알지 못했습니다. 스프링/자바를 사용할 때 공통적 인 성가심인데, 유닛/통합 테스트가 실제 생산 컨테이너를 사용하는 것과 약간 다른 경우가 많기 때문에 문제가 발생합니다.
도와주세요.
여전히 작동하지 않습니다. 나는 총 손실에 처해있다. 나는 모든 것을 시도했다. 나는 약 99 살이다.5 %는 이것이 Spring 런타임 또는 Tomcat 컨테이너 자체와 관련이 있다고 확신했습니다. – egervari