Ich weiß, die Frage ist seltsam. Leider habe ich einen Service, der alles zu haben, den Header ContentType=application/x-www-form-urlencoded
erfordert, obwohl der Körper JSON istSend JSON Körper aber mit ContentType = Anwendung/x-www-Form-urlencoded mit ClientBuilder
Ich versuche, JAX-RS zu verwenden 2.0 ClientBuilder es zu nennen:
String baseUrl = "http://api.example.com/";
JSONObject body = new JSONObject();
body.put("key", "value");
Client client = ClientBuilder.newClient();
client.register(new LoggingFilter());
Builder builder = client.target(baseUrl).path("something").request();
Invocation inv = builder
.header("Content-type", MediaType.APPLICATION_FORM_URLENCODED)
.buildPost(Entity.json(body));
Response response = inv.invoke();
int status = response.getStatus();
// I get 415, unsupported media type (in this case is unexpected)
Ich habe meine Protokolle geprüft und ich eventhough ich gründe application/x-www-form-urlencoded
(über die MediaType
) Antrag appearantly hat die Content-type
von application/json
Wie kann ich die Anfrage zwingen, die Content-type
ich möchte zu haben?
BTW: Das ist mein benutzerdefinierter Logger:
public class LoggingFilter implements ClientRequestFilter {
private static final Logger LOG = Logger.getLogger(LoggingFilter.class.getName());
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
LOG.log(Level.INFO, "body");
LOG.log(Level.INFO, requestContext.getEntity().toString());
LOG.log(Level.INFO, "headers");
LOG.log(Level.INFO, requestContext.getHeaders().toString());
}
}
Und das sind die Protokolle erhalte ich:
com.acme.LoggingFilter I body
com.acme.LoggingFilter I {"key":"value"}
com.acme.LoggingFilter I headers
com.acme.LoggingFilter I {Content-type=[application/json]}
Ah, ok, benutze einfach 'Entity.entity ("{..}", MediaType.APPLICATION_FORM ...) '. Ich denke, das sollte funktionieren. –