gpt4 book ai didi

java - 有一种干净的方法可以在 Spring Web API 中将字符串作为 json 返回吗?

转载 作者:行者123 更新时间:2023-11-29 06:52:11 24 4
gpt4 key购买 nike

例如,我必须按如下方式实现:

@RequestMapping(value = "/get-string", method = {RequestMethod.GET})
public @ResponseBody String getString() {
return "Hello World!";
}

当 Action 在 JS 文件中被 Ajax 调用时,收到的响应是:HelloWorld。因此,如果 Ajax 请求配置为仅接收 json 编码的响应,我会收到标准的解码错误。要在服务器端解决这个问题,我需要接收"HelloWorld"

我的问题是:有一种干净的方法可以做到这一点,而不仅仅是更改为下面的字符串返回的字符串?

    ...
return "\"Hello World!\"";
}

更新说明:在提出这个问题时,我对返回 JSON 映射而不是单个字符串的解决方案感到满意,就像我之前想要的那样。

但现在,我花了一些时间对此进行搜索,并试图了解更多关于 JSON 模式的信息。

首先,我发现我的问题与这些问题重复one , twothree .正确的answer说问题出在 Spring Boot 的默认序列化程序(Jackson 的库)中,它将字符串值(在序列化时)视为原始 JSON 字符串,因此它返回不带双引号的值而不是添加,正如我所期望的那样。

公平地说,我会选择 Bh​​argav 的 answer ,这更接近我正在寻找的东西。 ddbullfrog的答案和 RohaNayak是正确的,但它们没有正确解决我的问题。阿德米尔康斯坦丁诺的 comment也是正确的,他说使用纯文本而不是 json 格式,使用这个 reference . Luay Absulraheem 的 answer是配置操作的正确方法,但它无法按预期方式工作,它继续将字符串作为原始 json 发送。 非常感谢您的回答!

此外,可以自定义 Spring Boot 以使用 Gson 作为其序列化程序,如在 article 中所见。 .在您的项目上安装 Gson 依赖项后,您只需在 application.properties 文件中添加以下行:

...
spring.http.converters.preferred-json-mapper=gson

这样就不用每次要发送字符串值时都去解析由 Spring Boot 序列化,并且在 AJAX 处理程序上没有双引号时不要接收它。


我试图实现与 ASP.NET MVC 相同的行为,它使用 JSON.NET library执行序列化。这一点以及 AJAX 接受单个字符串(例如“hello world”)作为 JSON 的事实促使我对 JSON 模式进行了更深入的研究。

JSON 格式的“标准”定义不止一个。正如在此 Stack 的其他 question 中所讨论的那样,JSON 值中的当前“INTERNET STANDARD”由 RFC-8259 定义正如文件第 5 页所说:

A JSON value MUST be an object, array, number, or string, or one ofthe following three literal names:

  • false
  • null
  • true

如上所示,JSON 可以是比旧标准中更广泛的数据类型。


更新注意:另一种选择是返回一个 char[] 而不是 String实例。这样,Spring Boot 将不会识别为原始 JSON 字符串:

@RequestMapping(value = "/get-string", method = {RequestMethod.GET})
public @ResponseBody char[] getString() {
return "Hello World!".toCharArray();
}

最佳答案

是的,您可以使用 gson 或 jackson 等库将您的字符串转换为 JSON,然后为您提供如下所示的 json 输出。

Gson gson= new GsonBuilder().create();
gson.toJson(Your String);

此外,不要忘记添加produces = MediaType.APPLICATION_JSON_VALUE 到公开的方法,以便 spring 知道需要生成哪种 o/p。

关于java - 有一种干净的方法可以在 Spring Web API 中将字符串作为 json 返回吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44317740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com