2017-06-10 42 views
5

Mam filtr, przez który POST REST api idzie z i chcę wyodrębnić poniższą część mojego ładunku w filtrze.Jak zdobyć ładunek REST API przy użyciu ContainerRequestContext w metodzie filtru

{ 
     "foo": "bar", 
     "hello": "world" 
} 

kod filtra: -

public class PostContextFilter implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext requestContext) 
      throws IOException { 
     String transactionId = requestContext.getHeaderString("id"); 
    // Here how to get the key value corresponding to the foo. 
     String fooKeyVal = requestContext. ?? 
    } 
} 

nie widzę żadnego łatwego sposobu, aby uzyskać ładowność do API użyciu obiektu ContainerRequestContext.

Moje pytanie brzmi: jak uzyskać kluczową wartość odpowiadającą kluczowi foo w moim ładunku.

Odpowiedz

4

Podczas gdy filtry są przede wszystkim przeznaczone do manipulowania parametrami żądania i odpowiedzi, takimi jak nagłówki HTTP, URI i/lub metody HTTP, przechwytywacze są przeznaczone do manipulowania jednostkami poprzez manipulowanie strumieniami jednostek wejścia/wyjścia jednostki.

ReaderInterceptor pozwala manipulować przychodzące strumienie podmiotu, czyli strumienie pochodzące z z „drutu”. Korzystanie z Jackson do analizowania przychodzącego strumienia podmiot, twój Interceptor może być tak:

@Provider 
public class CustomReaderInterceptor implements ReaderInterceptor { 

    // Create a Jackson ObjectMapper instance (it can be injected instead) 
    private ObjectMapper mapper = new ObjectMapper(); 

    @Override 
    public Object aroundReadFrom(ReaderInterceptorContext context) 
         throws IOException, WebApplicationException { 

     // Parse the request entity into the Jackson tree model 
     JsonNode tree = mapper.readTree(context.getInputStream()); 

     // Extract the values you need from the tree 

     // Proceed to the next interceptor in the chain 
     return context.proceed(); 
    } 
} 

Ten answer a to answer mogą również być związane z Twoim pytaniem.