Jak mogę zobaczyć rzeczywiste żądanie, które Jersey generuje i wysyła do serwera? Mam problemy z konkretnym żądaniem, a osoba obsługująca serwer internetowy poprosiła o wyświetlenie pełnego żądania (z nagłówkami i tym podobnymi).
Jak mogę zobaczyć rzeczywiste żądanie, które Jersey generuje i wysyła do serwera? Mam problemy z konkretnym żądaniem, a osoba obsługująca serwer internetowy poprosiła o wyświetlenie pełnego żądania (z nagłówkami i tym podobnymi).
Odpowiedzi:
Jeśli używasz tylko Jersey Client API, LoggingFilter (filtr klienta) powinien pomóc:
Client client = Client.create();
client.addFilter(new LoggingFilter(System.out));
WebResource webResource = client.resource("http://localhost:9998/");
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
.get(ClientResponse.class);
W przeciwnym razie możesz ponownie rejestrować zarówno żądanie, jak i odpowiedź na serwerze przy użyciu innego LoggingFilter (filtru kontenera).
addFilter
metoda nie istnieje w Jersey 2.x. Jak teraz tego używasz?
Od Jersey 2,23 , tam LoggingFeature
można użyć. Poniższy przykład jest nieco uproszczony, pamiętaj, że możesz również zarejestrować tę funkcję WebTarget
.
Logger logger = Logger.getLogger(getClass().getName());
Feature feature = new LoggingFeature(logger, Level.INFO, null, null);
Client client = ClientBuilder.newBuilder()
.register(feature)
.build();
Response response = client.target("https://www.google.com")
.queryParam("q", "Hello, World!")
.request().get();
JavaDoc of LoggingFeature
mówi, że żądanie „i / lub” odpowiedź jest rejestrowane lol. Na moim komputerze oba są rejestrowane.
Odpowiedź @ ivan.cikic dotyczy Jersey 1.x. Oto, jak to się robi w Jersey 2.x:
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.filter.LoggingFilter;
import org.json.JSONException;
import org.json.JSONObject;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
...
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
client.register(new LoggingFilter());
To nie ma znaczenia, ale po prostu mają na co narzekać: Nowa LoggingFilter
jest naprawdę irytujące, ponieważ zmusza do korzystania Java Util Logging. Byłoby lepiej, gdyby dał mi kontrolę nad rejestratorem. Wygląda na krok wstecz w projektowaniu.
LoggingFilter(Logger logger, boolean PrintEntity)
konstruktora, ale nawet to nie drukuje plików cookie.
LoggingFeature
nic nie drukuje i LoggingFilter
drukuje ... 🤷♂️
Wszystkie te odpowiedzi są dość zbliżone, ale brakuje im ustawienia do rejestrowania treści żądania i odpowiedzi. Przynajmniej w przypadku Jersey 2.30.1 rejestruję żądanie i odpowiedź, w tym ich odpowiednie organy:
import javax.ws.rs.client.ClientBuilder;
import org.glassfish.jersey.logging.LoggingFeature;
import java.util.logging.Level;
import java.util.logging.Logger;
Logger logger = Logger.getLogger("LoggingFeature");
logger.setLevel(Level.ALL);
ClientBuilder.newClient()
.target("https://www.example.com")
.register(new LoggingFeature(
logger,
Level.ALL,
LoggingFeature.Verbosity.PAYLOAD_ANY,
8192))
.request()
.get();
Technicznie rzecz biorąc, wartości Level.All
i 8192
mogą być null
. Podaję je tutaj, aby były zwięzłe.