2017-02-24 1042 views
2

我有一個彈簧啓動應用程序,我嘗試使用Feign與遠程服務進行通信。我的@FeignClient定義如下: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 
    ); 
} 

我想SomeServicePayload類型的​​對象被序列化爲JSON。我預計這會自動發生,但事實並非如此。而是將​​序列化爲其完全限定的類名稱。

我是否需要爲此客戶端設置自定義編碼器/解碼器組合?我將如何做到這一點?

回答

0

@FeignClient引擎蓋下使用toString()建立請求字符串的方法。創建適當的請求的最簡單的方法是重寫手動toString()方法:

class SomeServicePayload{ 
    String payload; 

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

或者用於複雜對象通過使用ObjectMapper:

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; 
    } 
}