2016-08-02 4 views
0
unterstützt

Ich verwende Netflix Feign meine java http Kunden zu machen, einen Client wie folgt aus:Netflix Feign Inhaltstyp 'pplikation/json; charset = UTF-8' nicht

public interface PromocodeClient { 


@Headers({ 
    "Content-Type:" + MediaType.APPLICATION_JSON_UTF8_VALUE, "userIdentifier: {userIdentifier}" 
}) 
@RequestLine("POST /rootpath/{code}/unblock") 
Boolean unblock(
    @Param("userIdentifier") String userIdentifier, 
    @Param("code") String promocode, 
    BookingDTO booking); 


static PromocodeClient connect() { 
    return Feign.builder() 
     .encoder(new GsonEncoder()) 
     .decoder(new GsonDecoder()) 
     .target(PromocodeClient.class, Urls.SERVICE_URL.toString()); 
     //Url.SERVICE_URL = http://localhost:8082/1.0 
} 

Ich erhalte eine seltsame Fehler

{ 
    "timestamp" : "2016-08-02T07:47:16.208+0000", 
    "status" : 415, 
    "error" : "Unsupported Media Type", 
    "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException", 
    "message" : "Content type 'pplication/json;charset=UTF-8' not supported", 
    "path" : "/1.0/rootpath/COD_PROMOCODE/unblock" 
} 
} 

die Nachricht sagt "Content-Typ 'pplikation/json; charset = UTF-8' nicht unterstützt", aber ich bin mit der MediaType.APPLICATION_JSON_UTF8_VALUE des Frühlings, welcher Wert ist

application/json; charset = UTF-8

Wer weiß, was passiert ist?

+1

Funktioniert es, wenn Sie nach dem Doppelpunkt ein Leerzeichen einfügen? '" Content-Type: "+ ...' (sollte nicht notwendig sein; aber der Server könnte etwas Hackiges machen, wie das Finden des ':' und das Bewegen von 2 Zeichen, um den Anfang des Wertes zu finden). –

Antwort

2

Sie können ein Leerzeichen nach dem Doppelpunkt müssen:

"Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE 
      ^here 

Es ist nicht von der HTTP standard erforderlich:

Der Feldwert um einen beliebigen Betrag von [linearen Leerzeichen] vorangestellt werden dürfen, wenn ein einzelnes [Leerzeichen] ist bevorzugt.

aber es ist möglich, dass der Server, den Sie sprechen werden, ist nicht wirklich vollständig kompatibel mit dem HTTP-Standard, und so auch so etwas wie:

header.substring(header.indexOf(':') + 2) 

den Wert des Headers zu finden, die behandelt nur den "bevorzugten" Fall.

Verwandte Themen