Nhìn đối với một số giúp đỡ với dữ liệu mùa xuân còn lại xác nhận liên quan đến việc xử lý đúng lỗi xác nhận:mùa xuân dữ liệu Nghỉ ngơi Validation Lẫn lộn
Tôi rất bối rối với các tài liệu liên quan đến xác nhận mùa xuân-dữ liệu còn lại ở đây: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#validation
tôi cố gắng để đối phó đúng với xác nhận cho một cuộc gọi POST mà cố gắng để tiết kiệm một thực thể công ty mới
tôi đã tổ chức này:
@Entity
public class Company implements Serializable {
@Id
@GeneratedValue
private Long id;
@NotNull
private String name;
private String address;
private String city;
private String country;
private String email;
private String phoneNumber;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "company")
private Set<Owner> owners = new HashSet<>();
public Company() {
super();
}
...
và RestResource này dao
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.rest.core.annotation.RestResource;
import com.domain.Company;
@RestResource
public interface CompanyDao extends PagingAndSortingRepository<Company, Long> {
}
POST Yêu cầu api/Công ty:
{
"address" : "One Microsoft Way",
"city" : "Redmond",
"country" : "USA",
"email" : "[email protected]",
"phoneNumber" : "(425) 703-6214"
}
Khi tôi phát hành một POST với một tên null, tôi nhận được câu trả lời còn lại sau với httpcode 500
{"dấu thời gian": 1455131008472, "trạng thái": 500, "lỗi": "Lỗi máy chủ nội bộ", "ngoại lệ": "javax.validation.ConstraintViolationException", "mess tuổi ":" Xác thực không thành công cho các lớp [com.domain.Company] trong thời gian tồn tại cho các nhóm [javax.validation.groups.Default,] \ nDanh sách các vi phạm ràng buộc: [\ n \ tConstraintViolationImpl {interpolatedMessage = 'có thể không rỗng' , propertyPath = name, rootBeanClass = class com.domain.Company, messageTemplate = '{javax.validation.constraints.NotNull.message}'} \ n] "," đường dẫn ":"/api/companies/"}
tôi đã cố gắng tạo ra các hạt sau, nhưng nó không bao giờ có vẻ làm bất cứ điều gì:
@Component(value="beforeCreateCompanyValidator")
public class BeforeCreateCompanyValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Company.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object arg0, Errors arg1) {
System.out.println("xxxxxxxx");
}
}
và thậm chí nếu nó đã làm việc, làm thế nào nó sẽ giúp tôi trong việc phát triển một phản ứng lỗi tốt hơn với một mã http phù hợp và đáp ứng json hiểu ?
rất bối rối
sử dụng 1.3.2.RELEASE
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
siêu mà làm việc một nét duyên dáng, btw là có anyway để tự động đã JSR 303 chú thích kiểm tra thay vì những thứ 'thủ công' tôi đang làm ở đây: \t @ Override \t public void xác nhận (đối tượng Object, lỗi lỗi) { \t \t \t \t Công ty công ty = (Công ty) đối tượng; \t \t \t \t if (StringUtils.isEmpty (company.getName())) { \t \t \t errors.rejectValue ("tên", "name.required", "điền ô Name là mất tích"); \t \t} \t \t \t \t \t} – 1977
Tôi nghĩ rằng nếu bạn có ngủ đông-validator trên classpath bạn sẽ có thể sử dụng các chế chú thích cũng - ví dụ 'org.hibernate.validator.constraints.NotEmpty' –
Tôi đã tự hỏi tại sao giải pháp của bạn vẫn hoạt động để tạo cũng như cập nhật (vì tôi chưa thêm một BeforeSaveCompanyValidator ..) .. vì vậy tôi bắt đầu thử nghiệm ... Có vẻ như Tôi thậm chí không cần một BeforeCreateCompanyValidator hoặc BeforeUpdateCompanyValidator vì bean cấu hình LocalValidatorFactoryBean xử lý tất cả. Tôi sẽ đăng phiên bản mới của lớp học của bạn trong bài đăng gốc ở trên. Nó dường như làm việc tuyệt vời nhưng vẫn còn một chút nhầm lẫn ... – 1977