2016-06-02 4 views
0

카프 카에게 메시지를 보내려고하고 있으며 카프 카에서 Spring 클라우드 스트림을 사용하여 동일한 메시지를 사용하려고합니다. Postman을 사용하여 JSON String { "acctNo": "32432", "tn": "3234"}을 제작자의 나머지 컨트롤러로 보냅니다. 내가 JSON의 ParserException을 얻고있다 :알 수없는 토큰 'Ã'¢ : expecting ('true', 'false'또는 'null')

com.fasterxml.jackson.core.JsonParseException을 인식 할 수없는 토큰을 'ÿ'기다리고 있었다 ('참', '거짓'또는 '널')에서 [출처 : [B @ 776e03af; com.fasterxml.jackson.core.JsonParser._constructError (JsonParser.java:1581) ~ [jackson-core-2.6.5.jar : 2.6.5] (com.fasterxml)에 있습니다. jackson.core.base.ParserMinimalBase._reportError (ParserMinimalBase.java:533) ~ [jackson-core-2.6.5.jar : 2.6.5] at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken (UTF8StreamJsonParser. java : 3451) ~ [jackson-core-2.6.5.jar : 2.6.5] com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue (UTF8StreamJsonParser.java:2610) ~ [jackson-core-2.6. 5.jar : 2.6.5] com.fasterxml.jackson.core.json.UTF8StreamJsonParser에서

내 코드는 다음과 같다 :

프로듀서 응용 프로그램 YAML

봄 : 클라우드 : 스트림 : 바인딩 : activationMsgQueue : 대상 : 시험 의 contentType : 응용 프로그램/JSON

프로듀서 나머지 컨트롤러 :

@RestController 

@RequestMapping ("/ ActivationQueueService") 공개 클래스 ActivationQueueController {

,451,515,
private static final Logger LOGGER = LoggerFactory 
     .getLogger(ActivationQueueController.class); 

@Autowired 
SpringCloudStreamClient producer; 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(new ActivationDataInfoValidator()); 
} 

@RequestMapping(method = RequestMethod.POST, value = "/sendMessage", headers = "Accept=application/json", produces = "application/json") 
public void sendMessage(@RequestBody @Valid ActivationDataInfo message) 
     throws JsonProcessingException { 


    LOGGER.debug("Activation Data Request Recieved : " + message.toString()); 
    if (message != null) { 
     ObjectMapper mapper = new ObjectMapper(); 
     producer.sendMessagetoKafka(message); 
     LOGGER.info("Activation Data Request sent to Kafka : " + message); 
    } 
} 

생산자 코드 :

@Service 

@EnableBinding (MessageChannels.class) 공용 클래스 SpringCloudStreamClient {

private static final Logger LOGGER = LoggerFactory 
     .getLogger(SpringCloudStreamClient.class); 

@Autowired MessageChannels msgChannel; 

public Object sendMessagetoKafka(ActivationDataInfo msg){ 
    LOGGER.info("Sending Message : " + msg); 
    msgChannel.save().send(MessageBuilder.withPayload(msg).build()); 
    return new String("Success"); 
} 

}

소비자 응용 프로그램 YAML :

스프링 : 구름 : 스트림 : 바인딩 : 입력 : 콘텐츠 유형 : application/x-java-object; type = com.comcast.activation.message.vo. 대상 ActivationDataInfo : 시험 그룹 : prac 소비자 : headerMode : 원시 enableDlq : 사실 resetOffsets : 사실 startOffset : 최신

소비자 코드 :

@EnableBinding(Sink.class) 

공용 클래스 LogSink {

private static Logger logger = LoggerFactory.getLogger(LogSink.class); 

@ServiceActivator(inputChannel = Sink.INPUT) 
public void loggerSink(ActivationDataInfo payload) throws Exception { 
    logger.info("Received: " + payload.getAcctNo()); 
} 

}

012 3,516,

도메인 클래스이 원인이 무엇

public class ActivationDataInfo { 

private String acctNo; 
private String tn; 

public String getAcctNo() { 
    return acctNo; 
} 
public void setAcctNo(String acctNo) { 
    this.acctNo = acctNo; 
} 
public String getTn() { 
    return tn; 
} 
public void setTn(String tn) { 
    this.tn = tn; 
} 

? 도와주세요.

답변

1

제작자가 사용하지 않기 때문에 클라이언트에서 headerMode: raw을 제거해보십시오.

+1

그게 문제를 해결했습니다. 고마워요, 마리우스. 대단히 감사합니다. –

+0

여러분을 환영합니다! –