问题描述
我正在使用 Rest 模板来 POST 数据 json,当我测试 o Postmen 时,它运行成功并返回 200.
I'm using Rest Template to POST data json, When i test o Postmen, it run success and return 200.
这是我的格式json:
This is my format json:
{
"senderUser": "[email protected]",
"data": [
{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{"value": "[email protected]"}],
"phones": [{"value": "0902032618"}],
"addresses": [{"street": "10", "city":"Osaka", "state": "Osake", "country":
{"code":"JP", "name":"Japan"}}],
"tag": ""
}
}
]
}
这是我的来源:
public static void main(String []args) {
RestTemplate restTemplate = new RestTemplate();
MappingJackson2HttpMessageConverter jsonHttpMessageConverter = new MappingJackson2HttpMessageConverter();
jsonHttpMessageConverter.getObjectMapper().configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
restTemplate.getMessageConverters().add(jsonHttpMessageConverter);
String url = "https://myservice.com/listeners/60011cbd4a674458d3b26025/90336429462601e7f3326641898fabd9948b349d";
try {
System.out.println("hi there");
JSONArray json = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("name", "khanh");
obj.put("lastname", "luong van");
obj.put("type", "0");
obj.put("dateOfBirth", "");
obj.put("emails", "[email protected]");
obj.put("phones", "0902032618");
obj.put("addresses", "Osaka");
json.put(obj);
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
headers.add("Content-Type", MediaType.APPLICATION_JSON.toString());
HttpEntity<String> entity = new HttpEntity<String>(obj.toString(), headers);
String result = restTemplate.postForObject(url, entity, String.class);
System.out.println(result);
}
catch(Exception e) {
e.printStackTrace();
}
}
这是构建日志时的异常:
this is exception when build log:
17:07:58.483 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "https://myservice.com/listeners/60011cbd4a674458d3b26025/90336429462601e7f3326641898fabd9948b349d"
17:07:58.485 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/json, application/*+json, application/*+json, */*]
17:07:58.486 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [{"emails":"[email protected]","addresses":"Osaka","name":"khanh","phones":"0902032618","dateOfBirth":"","type":"0","lastname":"luong van"}] as "application/json" using [org.springframework.http.converter.StringHttpMessageConverter@3a7442c7]
17:07:58.831 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "https://myservice.com/listeners/60011cbd4a674458d3b26025/90336429462601e7f3326641898fabd9948b349d" resulted in 400 (Bad Request); invoking error handler
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:620)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:380)
at com.javainuse.TestConnect.main(TestConnect.java:56)
我尝试了很多方法,但仍然发生同样的错误,我该如何解决问题?非常感谢
I have try with a lot way but it still happen same error, How i can fix the problem ? many thank
推荐答案
我认为 BAD REQUEST 是这种情况下的正确答案.在您使用 Postman 的测试中,您通过了请求正文:
I think the BAD REQUEST is the correct answer in this case.In your test using Postman, you passed the request body:
{
"senderUser": "[email protected]",
"data": [{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{
"value": "[email protected]"
}],
"phones": [{
"value": "0902032618"
}],
"addresses": [{
"street": "10",
"city": "Osaka",
"state": "Osake",
"country": {
"code": "JP",
"name": "Japan"
}
}],
"tag": ""
}
}]
}
而您的应用程序日志显示您正在发送请求正文:
while your application log says you are sending the request body:
{
"emails": "[email protected]",
"addresses": "Osaka",
"name": "khanh",
"phones": "0902032618",
"dateOfBirth": "",
"type": "0",
"lastname": "luong van"
}
除非您尝试使用的服务足够通用以接受过于不同的请求正文,否则它将触发错误请求响应.
Unless the service you are trying to consume is generic enough to accept too distinct request bodies, it will trigger a Bad Request response.
我建议您将 Postman 的请求正文作为参数传递给 HTTPEntity 构造函数作为测试:
I recommend you to pass the Postman's request body as a parameter to the HTTPEntity constructor as a test:
HttpEntity<String> entity = new HttpEntity<String>("{\r\n" +
" \"senderUser\": \"[email protected]\",\r\n" +
" \"data\": [{\r\n" +
" \"actionType\": \"update-contact\",\r\n" +
" \"data\": {\r\n" +
" \"name\": \"luong van\",\r\n" +
" \"lastname\": \"khanh\",\r\n" +
" \"type\": 0,\r\n" +
" \"title\": \"\",\r\n" +
" \"passport\": \"\",\r\n" +
" \"gender\": 1,\r\n" +
" \"bgInfo\": \"\",\r\n" +
" \"dateOfBirth\": \"\",\r\n" +
" \"emails\": [{\r\n" +
" \"value\": \"[email protected]\"\r\n" +
" }],\r\n" +
" \"phones\": [{\r\n" +
" \"value\": \"0902032618\"\r\n" +
" }],\r\n" +
" \"addresses\": [{\r\n" +
" \"street\": \"10\",\r\n" +
" \"city\": \"Osaka\",\r\n" +
" \"state\": \"Osake\",\r\n" +
" \"country\": {\r\n" +
" \"code\": \"JP\",\r\n" +
" \"name\": \"Japan\"\r\n" +
" }\r\n" +
" }],\r\n" +
" \"tag\": \"\"\r\n" +
" }\r\n" +
" }]\r\n" +
"}", headers);
这篇关于org.springframework.web.client.HttpClientErrorException:RestTemplate 中的 400 错误请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!