szuka pomocy danych z wiosennej walidacji spoczynku dotyczące właściwego obchodzenia się z błędami Walidacja:Wiosna danych Reszta Validation Zamieszanie
Jestem więc mylić z docs dotyczących walidacji wiosna-data-reszta tutaj: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#validation
staram się właściwie do czynienia z walidacji za wywołanie POST, który stara się uratować nowego podmiotu Spółka
mam ten podmiot:
@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();
}
...
i to RestResource 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 Żądanie API/firm:
{
"address" : "One Microsoft Way",
"city" : "Redmond",
"country" : "USA",
"email" : "[email protected]",
"phoneNumber" : "(425) 703-6214"
}
Kiedy wystawić POST z pustą nazwą, mam następującą odpowiedź odpoczynku z httpcode 500
{"znacznik czasu": 1455131008472, "status": 500, "błąd": "Wewnętrzny błąd serwera", "wyjątek": "javax.validation.ConstraintViolationException", "bałagan" age ":" Sprawdzanie poprawności nie powiodło się dla klas [com.domain.Company] podczas czasu utrzymywania dla grup [javax.validation.groups.Default,] \ nLista naruszenia ograniczeń: [\ n \ tConstraintViolationImpl {interpolatedMessage = 'nie może być pusty " , propertyPath = name, rootBeanClass = class com.domain.Company, messageTemplate = '{javax.validation.constraints.NotNull.message}'} \ n] "," path ":"/api/companies/"}
próbowałem tworzyć następujące fasoli, ale to nigdy nie wydaje się do niczego:
@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");
}
}
a nawet jeśli to nie działa, jak to mi pomóc w tworzeniu lepszej odpowiedzi błędzie z odpowiednim kodem hTTP i zrozumiałej odpowiedzi json ?
tak pomylić
użyciu 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>
Super który pracował urok, btw czy jest tak, aby automatycznie adnotacje JSR 303 zostały sprawdzone zamiast 'ręcznego' rzeczy robię tutaj: \t @Override \t public void sprawdzania poprawności (object Object błędy błędy) { \t \t \t \t Firma firmy = (Firma) obiekt; \t \t \t \t if (StringUtils.isEmpty (company.getName())) { \t \t \t errors.rejectValue ("nazwa", "name.required", "Pole Nazwa brakuje"); \t \t} \t \t \t \t \t} – 1977
myślę, że jeśli masz hibernate-walidator na ścieżce klasy powinien być w stanie wykorzystać te ograniczenia adnotacji, a także - na przykład 'org.hibernate.validator.constraints.NotEmpty' –
Zastanawiałem się, dlaczego Twoje rozwiązanie wciąż działa w przypadku tworzenia, a także aktualizacji (ponieważ nie dodałem funkcji BeforeSaveCompanyValidator ..) .. więc zacząłem eksperymentować ... Wygląda na to, Nie potrzebuję nawet funkcji BeforeCreateCompanyValidator lub BeforeUpdateCompanyValidator, ponieważ komponent bean LocalValidatorFactoryBean obsługuje to wszystko. Opublikuję nową wersję twojej klasy w oryginalnym wpisie powyżej. Wygląda na to, że działa świetnie, ale wciąż jest nieco zagmatwany ... – 1977