【问题标题】:How to enable utf-8 request body in spring-boot?如何在 spring-boot 中启用 utf-8 请求正文?
【发布时间】:2020-11-29 17:26:31
【问题描述】:

我有一个 spring-boot 项目(spring-boot 版本:v2.3.0.RELEASE)。在我的 api 中,我希望收到 String 正文,然后我会随意处理。问题是,如果这个字符串主体中有一个 utf-8 字符,它会以某种方式改变字符串:

    @RequestMapping(value= "/target", method = RequestMethod.POST)
    public List<Target> createTarget(@RequestBody String body) {
       return this.createTargets(body);
    }

如果字符串中没有 utf-8 字符(这是 json btw),那么当我调试 body 变量的值时,它看起来没问题。但是,当我尝试将 utf-8 字符发布到 api 时,会发生整个body 字符串的最后一个字符被剥离。我不知道为什么会这样?尝试了一些我在stackoverflow上找到的修复,但到目前为止没有帮助=/。我的情况是我发送了一个包含数组的 json 字符串。所以最后一个括号 ] 被剥离,我不知道为什么。

【问题讨论】:

    标签: java json spring spring-boot


    【解决方案1】:

    能够解决这个问题。事实证明,这不一定只是 spring-boot 的问题。简而言之,我从请求中删除了这个标头,它开始正常工作:

    'Content-Length': data.length,

    因此,由于某种原因,字符串中有 utf-8 字符,data.length 可能相差 1?或者是 spring-boot 太认真了,因此从字符串中删除了最后一个字符。

    【讨论】:

    • 您是否尝试在 @RequestMapping ( ) 中添加“consumes = MediaType.APPLICATION_JSON”
    • 如果设置内容长度,请注意将其设置为 data.getBytes().length,而不是字符串长度,即 data.length()(可能与字节长度不同,具体取决于内容中存在的编码和字符)
    【解决方案2】:

    您可以尝试转义字符。 转换:http://daniel-hug.github.io/characters/ 例如符号 Δ 将是 \u0394

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 2014-12-17
      • 2020-10-18
      • 2021-01-10
      • 2020-05-02
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多