2016-09-10 2 views
2

Ich benutze Dropwizard und habe einen Service, der sowohl Json und Protobuf unterstützt. Ich mag die @ Valid-Notation und Anmerkung zu Feldern in meinen Anfrageklassen. Problem ist, dass die @ Valid-Notation nur für Json und nicht für Protobuf funktioniert. Gibt es einen Weg oder einen guten Ansatz dafür, wie die @Valid-Annotation unabhängig vom Medientyp funktioniert?Dropwizard Protobuf Validierung

Beispiel Service:

@POST 
@Produces({ 
     MediaType.APPLICATION_JSON, "application/x-protobuf" 
}) 
@Consumes({ 
     MediaType.APPLICATION_JSON, "application/x-protobuf" 
}) 
@Path("/foo") 
void foo(@Valid Request request); 

public class Request 
{ 
    @NotBlank(message = "Missing info") 
    String field; 
} 

Antwort

0

Validierungen in Dropwizard vor der Version 1.0.0 in der JacksonMessageBodyProvider Klasse durchgeführt wurden, die im Wesentlichen eine MessageBodyReader (Klasse verantwortlich für Deserialisieren Ihre POJOs).

Wie der Name Jackson in der Klasse darstellt, war diese Funktion wahrscheinlich nur mit JSON-basierten Einheiten arbeiten.

gesagt haben, dass die einzige Alternative ist durch das Schreiben dieses Stück Code der Validierungs- sich in der Ressource-Methode auszuführen,

Validator validator = environment.getValidator(); 
Set<ConstraintViolation<T>> violations = validator.validate(object, validationGroups); 

Iterate die Verstoss gegen alle Verletzungen in der Anfrage POJO zu identifizieren, die kann in der Payload gesendet werden, wenn Sie die HTTP 4xx-Fehlerantwort zurückgeben.

Seit 1.0.0, gehen durch diese Pull Request auf Github. Die Verlagerung der Validierungslogik von Jackson nach Jersey sollte es im Wesentlichen anderen Entitätstypen ermöglichen, das Feature zu nutzen. Die DropwizardConfiguredValidator Implementierung wird als ConfiguredValidator in Jersey registriert, die die erforderlichen Validierungen durchführt.