【问题标题】:Spring REST - String Serialization - bug or feature?Spring REST - 字符串序列化 - 错误或功能?
【发布时间】:2021-10-31 17:50:08
【问题描述】:

我在 spring rest 中发现了一个非常奇怪的行为。

具有如下端点

@GetMapping("/foo")
public String foo() {
  return "bar";
}

返回值栏。听起来正确,但这不是一个有效的 json,有效的结果应该是“bar”(注意“”)。有人可能会争辩说,spring 期望如果一个方法返回一个字符串,您已经手动序列化了该对象,但是如果所有其他对象都由 spring 序列化,那么我希望有一种特殊的方式来告诉它已经序列化但默认方式应该是序列化值。

也许我在这里遗漏了一些东西,这就是我没有在 spring issue tracker jet 中创建票证的原因。

【问题讨论】:

  • 您需要格式化返回值以满足您的需要。 REST 只是公开一个端点。
  • @kometen 是和否,一方面我同意,另一方面,杰克逊对象映射器坐在它后面,应该序列化我返回的任何内容,这基本上是整个事情的重点.

标签: json serialization spring-rest


【解决方案1】:

按照此答案中的描述取消注册StringHttpMessageConverter 应该可以解决问题:https://stackoverflow.com/a/37906098/505621

【讨论】:

    【解决方案2】:

    虽然不是真正的答案,但有两种可能的解决方法:

    自己编码

    只需将所需的引号明确添加到响应字符串\"

    这可以通过使用 JSONObject.quote(yourString) 来完成。

    包装

    将您的字符串包装成一个简单的对象或自定义类。然后杰克逊知道如何处理它。

    Collections.singletonMap("value", yourString);
    

    【讨论】:

    • 也会对真正的答案很感兴趣
    • 当然可以,但正如您所说,它只是一种解决方法,而不是答案/解决方案
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多