Java org.springframework.web.client.HttpClientErrorException:RestTemplate中存在400个错误请求
我使用Rest模板发布数据json,当我测试o Postmen时,它运行success并返回200 这是我的json格式:Java org.springframework.web.client.HttpClientErrorException:RestTemplate中存在400个错误请求,java,json,spring,spring-boot,resttemplate,Java,Json,Spring,Spring Boot,Resttemplate,我使用Rest模板发布数据json,当我测试o Postmen时,它运行success并返回200 这是我的json格式: { "senderUser": "user@gmail.com", "data": [ { "actionType": "update-contact", "data": { "name": "luong van&
{
"senderUser": "user@gmail.com",
"data": [
{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{"value": "user@gmail.com"}],
"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", "user@gmail.com");
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();
}
}
我尝试了很多方法,但仍然发生同样的错误,我如何解决这个问题?非常感谢在这种情况下,我认为错误的请求是正确的答案。 在使用Postman的测试中,您通过了请求正文:
{
"senderUser": "user@gmail.com",
"data": [{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{
"value": "user@gmail.com"
}],
"phones": [{
"value": "0902032618"
}],
"addresses": [{
"street": "10",
"city": "Osaka",
"state": "Osake",
"country": {
"code": "JP",
"name": "Japan"
}
}],
"tag": ""
}
}]
}
{
"emails": "user@gmail.com",
"addresses": "Osaka",
"name": "khanh",
"phones": "0902032618",
"dateOfBirth": "",
"type": "0",
"lastname": "luong van"
}
当应用程序日志显示您正在发送请求正文时:
{
"senderUser": "user@gmail.com",
"data": [{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{
"value": "user@gmail.com"
}],
"phones": [{
"value": "0902032618"
}],
"addresses": [{
"street": "10",
"city": "Osaka",
"state": "Osake",
"country": {
"code": "JP",
"name": "Japan"
}
}],
"tag": ""
}
}]
}
{
"emails": "user@gmail.com",
"addresses": "Osaka",
"name": "khanh",
"phones": "0902032618",
"dateOfBirth": "",
"type": "0",
"lastname": "luong van"
}
除非您尝试使用的服务足够通用,可以接受太多不同的请求主体,否则它将触发错误的请求响应
我建议您将邮递员的请求正文作为参数传递给HTTPEntity构造函数作为测试:
HttpEntity<String> entity = new HttpEntity<String>("{\r\n" +
" \"senderUser\": \"user@gmail.com\",\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\": \"user@gmail.com\"\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);
HttpEntity entity=新的HttpEntity(“{\r\n”+
“\”发送者\“:\”user@gmail.com\“,\r\n”+
“\”数据\“:[{\r\n”+
“\”操作类型\“:\”更新联系人\“,\r\n”+
“\”数据\“:{\r\n”+
“\”名称\“:\”良文\“,\r\n”+
“\“lastname\”:\“khanh\”,\r\n“+
“\”类型\”:0\r\n“+
“\”标题\“:\”,\r\n“+
“\”passport\“:\”,\r\n“+
“\”性别\”:1,\r\n“+
“\”bgInfo\“:\”,\r\n“+
“\”出生日期\“:\”,\r\n“+
“\“电子邮件\”:[{\r\n”+
“\”值\“:\”user@gmail.com\“\r\n”+
“}],\r\n”+
“\“phones\”:[{\r\n”+
“\“值\”:\“0902032618\”\r\n“+
“}],\r\n”+
“\”地址\:[{\r\n”+
“\“street\”:\“10\”,\r\n“+
“\”城市\“:\”大阪\“,\r\n”+
“\'state\”:\'Osake\,\r\n”+
“\”国家\“:{\r\n”+
“\“代码\”:\“JP\”,\r\n“+
“\”名称\“:\”日本\“\r\n”+
“}\r\n”+
“}],\r\n”+
“\”标记\:\“\”\r\n“+
“}\r\n”+
“}]\r\n”+
“}”,标题);
我认为在这种情况下,错误的请求是正确的答案。
在使用Postman的测试中,您通过了请求正文:
{
"senderUser": "user@gmail.com",
"data": [{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{
"value": "user@gmail.com"
}],
"phones": [{
"value": "0902032618"
}],
"addresses": [{
"street": "10",
"city": "Osaka",
"state": "Osake",
"country": {
"code": "JP",
"name": "Japan"
}
}],
"tag": ""
}
}]
}
{
"emails": "user@gmail.com",
"addresses": "Osaka",
"name": "khanh",
"phones": "0902032618",
"dateOfBirth": "",
"type": "0",
"lastname": "luong van"
}
当应用程序日志显示您正在发送请求正文时:
{
"senderUser": "user@gmail.com",
"data": [{
"actionType": "update-contact",
"data": {
"name": "luong van",
"lastname": "khanh",
"type": 0,
"title": "",
"passport": "",
"gender": 1,
"bgInfo": "",
"dateOfBirth": "",
"emails": [{
"value": "user@gmail.com"
}],
"phones": [{
"value": "0902032618"
}],
"addresses": [{
"street": "10",
"city": "Osaka",
"state": "Osake",
"country": {
"code": "JP",
"name": "Japan"
}
}],
"tag": ""
}
}]
}
{
"emails": "user@gmail.com",
"addresses": "Osaka",
"name": "khanh",
"phones": "0902032618",
"dateOfBirth": "",
"type": "0",
"lastname": "luong van"
}
除非您尝试使用的服务足够通用,可以接受太多不同的请求主体,否则它将触发错误的请求响应
我建议您将邮递员的请求正文作为参数传递给HTTPEntity构造函数作为测试:
HttpEntity<String> entity = new HttpEntity<String>("{\r\n" +
" \"senderUser\": \"user@gmail.com\",\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\": \"user@gmail.com\"\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);
HttpEntity entity=新的HttpEntity(“{\r\n”+
“\”发送者\“:\”user@gmail.com\“,\r\n”+
“\”数据\“:[{\r\n”+
“\”操作类型\“:\”更新联系人\“,\r\n”+
“\”数据\“:{\r\n”+
“\”名称\“:\”良文\“,\r\n”+
“\“lastname\”:\“khanh\”,\r\n“+
“\”类型\”:0\r\n“+
“\”标题\“:\”,\r\n“+
“\”passport\“:\”,\r\n“+
“\”性别\”:1,\r\n“+
“\”bgInfo\“:\”,\r\n“+
“\”出生日期\“:\”,\r\n“+
“\“电子邮件\”:[{\r\n”+
“\”值\“:\”user@gmail.com\“\r\n”+
“}],\r\n”+
“\“phones\”:[{\r\n”+
“\“值\”:\“0902032618\”\r\n“+
“}],\r\n”+
“\”地址\:[{\r\n”+
“\“street\”:\“10\”,\r\n“+
“\”城市\“:\”大阪\“,\r\n”+
“\'state\”:\'Osake\,\r\n”+
“\”国家\“:{\r\n”+
“\“代码\”:\“JP\”,\r\n“+
“\”名称\“:\”日本\“\r\n”+
“}\r\n”+
“}],\r\n”+
“\”标记\:\“\”\r\n“+
“}\r\n”+
“}]\r\n”+
“}”,标题);
使用与JSON模式和Jacksonmapper或类似工具匹配的POJO来节省时间。POJO到JSON,反之亦然,这并不是一个您需要对IMO过多担心的问题,因为有框架级的功能和库可以解决这个问题。使用JSONArray和JSONObject构建它过于冗长,而且容易出现人为错误。使用与JSON模式和Jacksonmapper或类似的POJO来节省时间。POJO到JSON,反之亦然,这并不是一个您需要对IMO过多担心的问题,因为有框架级的功能和库可以解决这个问题。使用JSONArray和JSONObject构建它太冗长,而且容易出现人为错误。你能给我详细的回答吗?@luongkhanh我两次粘贴同一请求正文时出错了。我已经改正了。我的建议是让一个测试通过与你通过邮递员完全相同的身体。你可以考虑看一下KaTik PV的建议。使用POJO和类似Jackson或Gson的序列化库可以节省您的时间,并且不太容易出错。您能给我详细的答案吗?@luongkhanh我两次粘贴相同的请求正文时出错了。我已经改正了。我的建议是让一个测试通过与你通过邮递员完全相同的身体。你可以考虑看一下KaTik PV的建议。使用POJO和类似Jackson或Gson的序列化库可以节省时间,并且不太容易出错。