2017-02-24 9 views
2

원격 서비스와 통신하기 위해 Feign을 사용하려고하는 스프링 부팅 응용 프로그램이 있습니다. 내가 JSON으로 직렬화되는 유형 SomeServicePayloadpayload 객체를 원하는FeignClient : RequestParam을 JSON으로 serialize

@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가 정의됩니다. 나는 이것이 자동적으로 일어날 것을 기대했으나 그렇지 않다. 대신 payload은 정규화 된 클래스 이름으로 serialize됩니다.

이 클라이언트에 대해 사용자 지정 인코더/디코더 조합을 설정해야합니까? 어떻게하면 좋을까요?

답변

0

@FeignClient 후드 아래에 굴곡 요구 문자열 toString()을 사용했습니다. 적절한 요청을 만드는 가장 쉬운 방법은 수동으로 toString() 메소드를 오버라이드 (override)하는 것입니다

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 사용하여 복잡한 객체에 대한