@FeignClient(name = "${query.name}", configuration = FeignConfiguration.class)
public interface QueryClient {
@PostMapping(value = "/Service/call")
String getQueryData(@RequestBody JSONObject jsonObject);
这一步其实就是把配置类的属性加入到客户端的设置中,即configuration = FeignConfiguration.class这段代码
3.yml文件中加入
logging:
level:
com.foreign.feign.QueryClient: debug
4.最后在全局日志设置里面把控制台的日志级别设置为debug,不然就算fegin日志级别设置为debug了也是看不到debug日志的
于是重启工程,再次发送报文给对方,然后在debug日志中发现了这么一块日志(日志有所删除,只保留核心部分)
DEBUG o.s.c.o.support.SpringEncoder - Writing [{"SERVICE":{"SERVICE_HEADER":{"SUB_TERMINAL_TYPE":"Android","VERSION_ID":"01","CHANNEL_ID":"BANK","ORG":"15601","SERVICESN":"APP2020052116583861818","OP_ID":"001","SERVICE_ID":"LoanQueryByCust","ACQ_ID":"10000000","REQUEST_TIME":"20200521165838","MAC":""},"SERVICE_BODY":{"REQUEST":{"CUST_NAME":"王大大3","ID_NO":"340602198512141876","PRODUCT_CODE":"6001","PRODUCT_GROUP":"KX001","QUERY_RANGE_IND":"01"}}}}] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@2e3c5ecc]
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] ---> POST http://29.23.35.3:31006/nmsRpcNonfinService/call HTTP/1.1
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] Content-Length: 409
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] Content-Type: application/json;charset=UTF-8
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] X-CMSP-ApiRsskey: OGY5MDQwZmZjNzdhNDQ1N2FhYWZkNWEzNjcyYjZlZjUxNTcwNTg1NzgzMzc3
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] X-CMSP-ApplicantCode: T134505761.NMS001.S00001
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] X-CMSP-ClientServiceCode: aas-foreign-1
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] X-CMSP-ClientServiceVersion: v1.0
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData]
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] {"SERVICE":{"SERVICE_HEADER":{"SUB_TERMINAL_TYPE":"Android","VERSION_ID":"01","CHANNEL_ID":"BANK","ORG":"15601","SERVICESN":"APP2020052116583861818","OP_ID":"001","SERVICE_ID":"LoanQueryByCust","ACQ_ID":"10000000","REQUEST_TIME":"20200521165838","MAC":""},"SERVICE_BODY":{"REQUEST":{"query_RANGE_IND":"01","product_CODE":"6001","cust_NAME":"王大大3","product_GROUP":"KX001","id_NO":"340602198512141876"}}}}
DEBUG c.s.foreign.feign.QueryClient - [QueryClient#getQueryData] ---> END HTTP (409-byte body)
可以看到,我用代码发送的报文内容并不是对方日志所收到的null,在这里推测一下,对方日志打印的并不是接收到的原始报文而是经过各种判断处理后的报文内容。可能我发送的报文格式不对导致对面处理报文时判断出报文内容不正确,于是对面就草草的打印了一个接收到的报文内容为null的日志。同时对面不会处理异常,按理说即使我的报文内容有误,也不应该返回一个500错误过来而是返回一个类似于“报文内容不正确”的信息给我。哎,对面的代码编写不规范啊。
言归正传,经过仔细查看这个段日志,我发现了这段日志的第一行和倒数第二行的报文内容不一样了,有部分的大写变成小写了
{"CUST_NAME":"王大大3","ID_NO":"340602198512141876","PRODUCT_CODE":"6001","PRODUCT_GROUP":"KX001","QUERY_RANGE_IND":"01"}
{"query_RANGE_IND":"01","product_CODE":"6001","cust_NAME":"王大大3","product_GROUP":"KX001","id_NO":"340602198512141876"}
那么为什么会这样呢,我分析是因为这部分内容导致的
using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@2e3c5ecc]
即我的报文又经过了MappingJackson2HttpMessageConverter它的重新编码,导致了部分大写变成小写了
报文出错原因分析
那么为什么就只有这一部分的报文内容大写变成了小写而且是下划线的前段部分?是不是因为这部分的报文内容是通过查询数据库把数据放经javabean,然后再把javabean转换为JsonObject之后导致的?
于是便不用javabean转换为JsonObject的方式,而是把字段值一个一个put进去的方式,结果把这部分代码改了之后,发现,有结果返回了!
1.首先报文的内容最好不要用大写字母,对方要求报文内容全部是大写,这就很离谱
2.作为服务方,首先需要把接收到的原始报文打印出来
3.异常处理要规范,像这种报文内容不正确的情况,不应该直接抛出异常而是需要返回一个错误结果给调用方
4.要是报文内容有大写的,最好是手动put字段值
5.可以开启debug级别的日志查看我们自己到底发送了什么报文过去
1. 新建接口
1.1 创建Collection集合
在刚开始一个项目时,为了后续便于组织和管理,把同属该项目的多个 API,放在一组里。所以要先去新建一个 Collection: New -> Collection
1.2 创建请求
1.3 设置HTTP请求
设置 HTTP 的 Method 方法和输入 api 的地址以及请求参数或请求体
以下为获取微信公众号为案例所设计的HTTP请求
GET是请求方法,请求方法是HTTP请求的必要要素,常见的请求方法有GET和PO
问题来自于生产的一个批量处理提交操作,当POST请求提交的数据量过大时,就会产生错误,发生例如:超时、504等等现象。惊讶之余,并不着急解决BUG,更想弄清楚为什么POST请求会出现这种情况,第一反应就是打开Apache Tomcat官网去找参数。因为之前有做过容器定制,所以在里面改过不少东西大致清楚在哪里限制了。
下面也不墨迹了直接发链接:http://tomcat.apache.org/to...
根据提供的引用内容,可以得出以下结论和建议:
Postman是一个常用的API测试工具,可以用来发送HTTP请求并查看响应。如果使用Postman发送报文能够得到正确的响应,但使用代码发送报文却返回500错误,那么问题可能出现在代码中。可以尝试检查代码中的报文发送方式、报文内容、请求头等方面,确保与Postman中的设置一致。如果还是无法解决问题,可以考虑使用其他工具或者联系对方进行协助。
另外,如果在使用Ajax请求时遇到问题,可以检查请求头中的content-type是否正确设置。如果设置了application/json,但是后端没有正确处理这种请求类型,就会导致请求失败。可以尝试将content-type设置为其他类型或者不设置,看看是否能够解决问题。