: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#validationBahar Veri istirahat Doğrulama Karışıklık
:
Burada yay veri dinlenme geçerliliği hususunda dokümanlar ile kafam karıştı
@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();
}
: Ben düzgün bu kuruluşu var yeni bir Şirket işletmeye bırakmıştır
kurtarmaya çalıştığı bir POST çağrısı için doğrulama ile başa çıkmak için çalışıyorum API/Şirketlere
...
ve bu RestResource daoimport 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 İsteği:
{
"address" : "One Microsoft Way",
"city" : "Redmond",
"country" : "USA",
"email" : "[email protected]",
"phoneNumber" : "(425) 703-6214"
}
Ben boş adla bir POST çıkardığımızda aşağıdaki dinlenme yanıt almak httpcode 500
{"timestamp": 1455131008472, "status": 500, "error": "İç Sunucu Hatası", "exception": "javax.validation.ConstraintViolationException", "karmaşa age ":" Gruplar için süreklilik süresi [val.alan.Company] için doğrulama başarısız oldu [javax.validation.groups.Default,] \ nYazılım ihlallerinin listesi: [\ n \ tConstraintViolationImpl {interpolatedMessage = 'boş olamaz' , propertyPath = name, rootBeanClass = class com.domain.Company, messageTemplate = '{javax.validation.constraints.NotNull.message}'} \ n] "," yol ":"/api/şirketler/"}
aşağıdaki fasulye oluşturmaya çalıştı, ama asla bir şey yapmak görünüyor:
@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");
}
}
ve işe bile, bu uygun bir http kodu ve anlaşılır json yanıt ile daha iyi bir hata yanıtını geliştirmede bana yardımcı olacağını nasıl ? Daha önce devam JPA düzeyinde gerçekleştirilir - 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>
süper Btw otomatik olarak zaten var \t @Override \t public void validate (Object nesnesini hatalar hataları) { \t \t \t: jsr 303 ek açıklamalar ne işim 'manuel' şeyler yerine kontrol ettikten 210 Şirket şirketi = (Şirket) nesne; \t \t \t \t if (StringUtils.isEmpty (company.getName())) { \t \t \t errors.rejectValue ("isim", "name.required", "Ad alanı eksik"); \t \t} \t \t \t \t \t} – 1977
Ben de size üzerinde sınıf hazırda doğrulayıcı varsa bu kısıtlamayı kullanmak gerekir Ek açıklamalar düşünüyorum - örneğin 'org.hibernate.validator.constraints.NotEmpty' –
Çözümünüzün neden olduğu gibi güncellemelerin yanı sıra güncellemeler için de neden çalıştığını merak ettim (bir BeforeSaveCompanyValidator eklemedim ...) .. bu yüzden denemeye başladım ... Görünüşe göre LocalValidatorFactoryBean yapılandırma çekirdeği her şeyi ele aldığından bir BeforeCreateCompanyValidator veya BeforeUpdateCompanyValidator'a bile ihtiyacım yok. Sınıfınızın yeni sürümünü yukarıdaki orijinal gönderide yayınlayacağım. Harika çalışıyor ama yine de biraz kafam karışmış görünüyor ... – 1977