2016-07-13 27 views
0

Wie validiere ich, dass @FormParams für eine POST-Anfrage nicht leer sind? Wir verwenden Dropwizard Version 0.9.3.Dropwizard Validate @FormParam

@POST 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public Response addCard(@FormParam("title") @NotEmpty String title, 
         @FormParam("latitude") @NotNull Double latitude, 
         @FormParam("longitude") @NotNull Double longitude, 
         @FormParam("public") @NotNull Boolean publicCard, 
         @FormParam("user_id") @NotNull Integer userId) { 

eine POST-Anforderung ohne den Titel param Senden ergibt diesen Server-Fehler:

!org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/html, type=class io.dropwizard.jersey.validation.ValidationErrorMessage, genericType=class io.dropwizard.jersey.validation.ValidationErrorMessage.

Und der Kunde erhält:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <title>Error 500 Request failed.</title> 
</head> 
<body> 
    <h2>HTTP ERROR 500</h2> 
    <p>Problem accessing /cards. Reason: 

     <pre> Request failed.</pre> 
    </p> 
    <hr> 
     <i> 
      <small>Powered by Jetty://</small> 
     </i> 
     <hr/> 
    </body> 
</html> 

Früher habe ich @NotEmpty für @QueryParam verwendet und das hat gut funktioniert. Ich möchte der Kunde so etwas wie (400 Bad Anfrage) erhalten:

{ 
"errors": [ 
    "query param title may not be null", 
] 
} 

Ich habe versucht, mit der Verwendung von NonEmptyStringParam in dropwizard eingeführt 0.9.0 aber das hat nicht funktioniert. Irgendwelche Vorschläge?

EDIT:

In der Dokumentation folgendes: „Wenn Sie ein optionales Feld oder Parameter, die Validierung benötigt, fügen Sie die @UnwrapValidatedValue Anmerkung auf sie“ und "Wenn Sie möchten, dass q in dieser Situation" Optional.absent() "auswertet, ändern Sie den Typ in" NonEmptyStringParam ". Ich habe es versucht, aber der Parameter wird nicht ausgewertet.

Antwort

1

Sie möchten, dass die Antwort in JSON-Form kommt. Sie müssen produces auf Ihrer Methode hinzufügen.

@Produces(MediaType.APPLICATION_JSON) 

Dies sollte Ihr Problem lösen.

+0

Oh, dumm mich! Vielen Dank! – Snuggles