【问题标题】:Need help to deserialize json with Jackson from Spring-boot需要帮助从 Spring-boot 使用 Jackson 反序列化 json
【发布时间】: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


【解决方案1】:

问题已解决,SOAP UI 存在错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多