【发布时间】:2015-08-07 07:29:11
【问题描述】:
我正在尝试将 Json 发布到我的 REST 服务,但我遇到了字符集错误,我做了一个非常简单的示例来重现我的错误。
简单模型人
public class Person {
public Person() {}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
简单的休息控制器:
@RestController
public class PersonController {
@RequestMapping(value={"/person"}, method=RequestMethod.POST, consumes="application/json", produces="application/json")
public @ResponseBody ResponseEntity<String> newPerson(@RequestBody Person person) {
return new ResponseEntity<String>(person.getName(), HttpStatus.OK);
}
}
当我发布 json 时:
{
"name":"Joao"
}
工作正常,我的响应正文上有 200 OK 和“Joao”。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Application-Context: application
Content-Type: application/json;charset=UTF-8
Content-Length: 4
Date: Mon, 25 May 2015 19:09:56 GMT
Joao
但如果我尝试使用带有拉丁字符的 json,例如
{
"name":"João"
}
我收到以下错误:
HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
X-Application-Context: application
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 25 May 2015 19:12:56 GMT
Connection: close
{"timestamp":1432581176997,"status":400,"error":"Bad Request","exception":"org.springframework.http.converter.HttpMessageNotReadableException","message":"Could not read JSON: Invalid UTF-8 middle byte 0x6f\n at [Source: java.io.PushbackInputStream@10b0d4cd; line: 2, column: 14] (through reference chain: com.example.model.Person[\"name\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0x6f\n at [Source: java.io.PushbackInputStream@10b0d4cd; line: 2, column: 14] (through reference chain: com.example.model.Person[\"name\"])","path":"/person"}
我正在使用 spring-boot 1.2.3.RELEASE,它有 jackson 2.5.1 作为依赖项。
我找不到这个问题的解决方案,有什么建议吗?
【问题讨论】:
-
如何发布 JSON?你是从文件中读取的吗?如果是这样,文件的编码是什么,你如何读取它?向我们展示代码。此外,RestController 的要点是所有方法都使用 ResponseBody 隐式注释。你不需要那个注释。
-
@JBNizet 我正在使用 SoapUI 5.1.3 发布我的 JSON。
-
SoapUI 不能正确地将其 JSON 编码为 UTF8。或者你让它使用一个不是 UTF8 编码的文件。
-
@JBNizet 谢谢你的建议,我会尝试用另一种方式发布我的Json
-
@JBNizet 你说得对,问题出在 SOAP UI 上,谢谢你的建议,我花了好几个小时试图解决这个问题。
标签: java json post jackson spring-boot