2017-02-24 3 views
2

私はFeignを使用してリモートサービスと通信しようとしている春の起動アプリケーションがあります。私はJSONにシリアライズするタイプSomeServicePayloadの​​オブジェクトを希望FeignClient:RequestParamをJSONにシリアル化

@FeignClient(name="TEST_SERVICE", url="URL") 
@Component 
public interface SomeServiceClient 
{ 
    @RequestMapping(
     method = RequestMethod.POST, 
     value = "/someService", 
     consumes = "application/json", 
     produces = "application/json" 
    ) 
    SomeServiceResult getServiceResult(
     @RequestParam(value = "mode") String mode, 
     @RequestParam(value = "payload") SomeServicePayload payload 
    ); 
} 

次のように私の@FeignClientが定義されています。私はこれが自動的に起こると思ったが、そうはしなかった。代わりに、​​は完全修飾クラス名にシリアル化されます。

このクライアント用にカスタムエンコーダ/デコーダの組み合わせを設定する必要はありますか?どうすればいい?

答えて

0

@FeignClientボンネットの下で使用されていますtoString() bulding request stringの方法。適切な要求を作成する最も簡単な方法は、手動でtoString()メソッドをオーバーライドすることです:

public class SomeServicePayload{ 

    private String payload; 

    public String getPayload() { 
     return payload; 
    } 

    public void setPayload(String payload) { 
     this.payload = payload; 
    } 

    private ObjectMapper mapper = new ObjectMapper(); 
    @Override 
    public String toString() { 
     try { 
      return mapper.writeValueAsString(this); 
     } catch (JsonProcessingException e) { 
      //... 
     } 
     return null; 
    } 
} 
class SomeServicePayload{ 
    String payload; 

    @Override 
    public String toString() { 
     return "{\"payload\":\"" + payload + "\"}"; 
    } 
} 

それともObjectMapper使って、複雑なオブジェクトのための

関連する問題