2016-04-27 8 views
1

Lassen Sie uns sagen, dass ich die folgende JAX-RS Web-Service haben:Wie kann ein JAX-RS-Webdienst nur Formularparameter akzeptieren, die im Anfragetext gesendet werden?

public class HelloService { 

    @POST 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getMessage(@FormParam("name") String name) { 
     return "Hello, " + name + "!"; 
    } 
} 

Dieser Webservice Formularparameter akzeptieren, ob sie in dem Antrag Körper gesendet oder in der URL gesendet (z http://foo.bar/baz?name=qux).

Gibt es eine Möglichkeit, dass ich den Web-Service so konfigurieren kann, dass nur Formularparameter akzeptiert werden, die im Anfragetext gesendet werden?

Antwort

2

könnten Sie einen ContainerRequestFilter versuchen, wie folgend:

@Provider 
public class QueryParametersFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 

     String query = requestContext.getUriInfo().getRequestUri().getQuery(); 

     if (query != null && !query.isEmpty()) { 
      requestContext.abortWith(
       Response.status(Status.BAD_REQUEST) 
         .entity("Parameters not allowed in the query string") 
         .build()); 
     } 
    } 
} 

Die Umsetzung taylored sein kann Ihren Bedürfnissen gerecht zu werden.

Wichtig: Der oben definierte Filter ist global, das heißt, für alle Ressourcen Methoden ausgeführt werden. Um diesen Filter an eine Reihe von Methoden zu binden, überprüfen Sie diese answer.


Für dynamische Bindung, Sie könnten auch einen DynamicFeature versuchen.