java int转uin16_spring – 无法提取响应:没有为响应类型找到合适的HttpMessageConverter...

我是Spring的新成员,并在Spring集成http模块中工作,以满足我的项目需求.我从出站网关发送请求作为http客户端.

我正在尝试向服务器发起请求,服务器应该使用我的设置值返回消息有效负载.我正在使用发送到服务器将对象转换为JSON

我正在从客户端(HttpClientDemo)向服务器端出现的入站网关发送请求,如下所示.为此,我将我的对象转换为JSON,然后在客户端转换为JSON字符串到对象,在那里执行一些简单的操作并将其发送回客户端(HttpClientDemo)但在此之前,我得到与之相关的异常HttpMessageConverter如下:

Exception in thread "main" org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycompany.MyChannel.model.FFSampleResponseHttp] and content type [text/plain;charset=UTF-8]

at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:108)

at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:784)

at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:769)

at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:549)

at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:517)

at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:462)

at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:421)

at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:170)

at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)

at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)

at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:101)

at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97)

at org.springframework.integration.channel.AbstractSubscribablMyChannel.doSend(AbstractSubscribablMyChannel.java:77)

at org.springframework.integration.channel.AbstractMessagMyChannel.send(AbstractMessagMyChannel.java:255)

at org.springframework.integration.channel.AbstractMessagMyChannel.send(AbstractMessagMyChannel.java:223)

at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:114)

at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:44)

at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:93)

请在下面找到相关代码:

客户端代码:

HttpClientDemo.java

public class HttpClientDemo {

private static Logger logger = Logger.getLogger(HttpClientDemo.class);

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/integration/http-outbound-config.xml");

RequestGateway requestGateway = context.getBean("requestGateway", RequestGateway.class);

FFSampleRequestHttp FFSampleRequesthttp = new FFSampleRequestHttp();

FFSampleRequesthttp.setMyChannelID("1");

FFSampleRequesthttp.setMyNumber("88");

FFSampleRequesthttp.setReferenceID("9I");

FFSampleRequesthttp.setTemplateType(1);

FFSampleRequesthttp.setTimestamp("today");

FFSampleResponseHttp reply = requestGateway.FFSampleResponsegatway(FFSampleRequesthttp);

logger.info("Replied with: " + reply);

}

}

我的请求网关如下:RequestGateway.java

public interface RequestGateway {

FFSampleResponseHttp FFSampleResponsegatway(FFSampleRequestHttp request);

}

HTTP的出站config.xml中

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:int="http://www.springframework.org/schema/integration"

xmlns:int-http="http://www.springframework.org/schema/integration/http"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd

http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd">

service-interface="com.mycompany.MyChannel.Common.RequestGateway"

default-request-channel="requestChannel"/>

在web.xml

MyChannel-http

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

/WEB-INF/servlet-config.xml

2

MyChannel-http

/receiveGateway

index.html

的servlet-config.xml中

public class FFSampleHttpImpl{

private static org.apache.log4j.Logger log = Logger

.getLogger(FFSampleImpl.class);

@Autowired

FFSampleRequestHttp request;

public FFSampleHttpImpl() {

}

public FFSampleHttpImpl(FFSampleRequestHttp request) {

super();

this.request = request;

}

public String issueResponseFor(String str) throws JsonParseException, JsonMappingException, IOException {

ObjectMapper mapper = new ObjectMapper();

FFSampleRequestHttp FFSampleRequestHttp = mapper.readValue(new String(str), FFSampleRequestHttp.class);

FFSampleRequestHttp.setReferenceID("Hi My Number");

String strs = new String();

strs = mapper.writeValueAsString(FFSampleRequestHttp);

return strs;

}

}

FFSampleRequestHttp.java

public class FFSampleRequestHttp {

protected String MyNumber;

protected String referenceID;

protected String myChannelID;

protected String timestamp;

protected int templateType;

public String getMyNumber() {

return MyNumber;

}

public void setMyNumber(String MyNumber) {

this.MyNumber = MyNumber;

}

public String getReferenceID() {

return referenceID;

}

public void setReferenceID(String referenceID) {

this.referenceID = referenceID;

}

public String getMyChannelID() {

return myChannelID;

}

public void setMyChannelID(String myChannelID) {

this.myChannelID = myChannelID;

}

public String getTimestamp() {

return timestamp;

}

public void setTimestamp(String timestamp) {

this.timestamp = timestamp;

}

public int getTemplateType() {

return templateType;

}

public void setTemplateType(int templateType) {

this.templateType = templateType;

}

}

FFSampleResponseHttp.java

public class FFSampleResponseHttp {

protected String MyNumber;

protected String referenceID;

protected String myChannelID;

protected String timestamp;

protected int templateType;

public String getMyNumber() {

return MyNumber;

}

public void setMyNumber(String MyNumber) {

this.MyNumber = MyNumber;

}

public String getReferenceID() {

return referenceID;

}

public void setReferenceID(String referenceID) {

this.referenceID = referenceID;

}

public String getMyChannelID() {

return myChannelID;

}

public void setMyChannelID(String myChannelID) {

this.myChannelID = myChannelID;

}

public String getTimestamp() {

return timestamp;

}

public void setTimestamp(String timestamp) {

this.timestamp = timestamp;

}

public int getTemplateType() {

return templateType;

}

public void setTemplateType(int templateType) {

this.templateType = templateType;

}

}

当我运行上面的代码时,我得到以下错误:

16:55:46.843 [main] DEBUG o.s.web.client.RestTemplate - Writing [{"MyNumber":"88","referenceID":"9I","myChannelID":"1","timestamp":"today","templateType":1}] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@7d31a3e2]

16:55:46.988 [main] DEBUG o.s.web.client.RestTemplate - POST request for "http://localhost:8080/MyChannel_prj-1.0.0.BUILD-SNAPSHOT/receiveGateway" resulted in 200 (OK)

Exception in thread "main" org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycompany.MyChannel.model.FFSampleResponseHttp] and content type [text/plain;charset=UTF-8]

at org.springframework.web.client.HttpMessageConverterExtractor.

我使用了spring integration基本示例代码作为参考.

请提供您的意见.我也尝试使用带有JSON的配置文件中的spring对象映射器来对象转换器,但是我也得到了HttpMessageConverter的similer问题.

请帮助我提供宝贵的意见和建议,如果我们对spring integration http对象映射器有任何限制,请告诉我.

嗨Artem,

感谢您的回复.我仍然面临下面提到的一些挑战.我根据您的建议完成了配置文件的更改.但在使用Jackson2JsonObjectMapper时遇到问题并需要你的进一步帮助.请在下面找到问题说明.

我已对文件进行了更改,现在文件如下所示:

我的Servlet-Config.xml文件内容如下:

-

-

输出绑定文件配置(负责向服务器发送消息的文件):

我的impl类方法如下:

public FfSampleResponseHttp issueResponseFor(FfSampleRequestHttp request) {

FfSampleResponseHttp ffSampleResponse2 = new FfSampleResponseHttp();

ffSampleResponse2.setCifNumber("Yappi I am in the method");

log.info("issueResponseFor(FfSampleRequesthttp request)");

return ffSampleResponse2;

}

我可以从客户端调用我的服务方法issueResponseFor服务器端,但是当进一步处理时:

Caused by: java.lang.IllegalArgumentException: 'json' argument must be an instance of: [class java.lang.String, class [B, class java.io.File, class java.net.URL, class java.io.InputStream, class java.io.Reader]

at org.springframework.integration.support.json.Jackson2JsonObjectMapper.fromJson(Jackson2JsonObjectMapper.java:93)

at org.springframework.integration.support.json.Jackson2JsonObjectMapper.fromJson(Jackson2JsonObjectMapper.java:44)

at org.springframework.integration.support.json.AbstractJacksonJsonObjectMapper.fromJson(AbstractJacksonJsonObjectMapper.java:55)

at org.springframework.integration.json.JsonToObjectTransformer.doTransform(JsonToObjectTransformer.java:78)

at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33)

... 54 more

我已经验证了调试后,有效负载体在响应中在成功漫游我的服务方法后,在Jackson2JsonObjectMapper.fromJson(…)的参数中的json对象中显示空白.我无法理解我在哪里犯这个错误.请提供您的帮助/意见.

如果我再次错过配置文件中的某些内容,请再次告诉我.非常感谢您的支持.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值