当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中返回JSON对象作为响应

万嘉熙
2023-03-14

我在Spring Boot中有一个RestController示例:

@RestController
@RequestMapping("/api")
class MyRestController
{
    @GetMapping(path = "/hello")
    public JSONObject sayHello()
    {
        return new JSONObject("{'aa':'bb'}");
    }
}

我正在使用JSON库org.JSON

当我点击API/hello时,我得到一个异常:

路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:没有找到具有根本原因的返回值:class org.json.JsonObject]的转换器

java.lang.IllegalArgumentException:未找到类型为:class org.json.JsonObject的返回值的转换器

问题是什么?有人能解释一下到底发生了什么吗?

共有1个答案

曹和正
2023-03-14

在使用Spring Boot web时,Jackson依赖项是隐式的,我们不必显式定义。如果使用Eclipse,可以在dependency hierarchy选项卡中的pom.xml中检查Jackson依赖项。

正如您用@restcontroller注释的那样,不需要执行显式json转换。只需返回一个POJO,jackson序列化器将负责转换为JSON。与@Controller一起使用时,它相当于使用@responsebody。我们没有将@responsebody放置在每个控制器方法上,而是将@restcontroller放置在常规的@controller上,默认情况下,@responsebody应用在该控制器中的所有资源上。
请参阅此链接:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody

您面临的问题是因为返回的对象(JSONObject)没有针对某些属性的getter。您的目的不是序列化这个JSONObject,而是序列化一个POJO。所以只要把POJO还给我。
请参阅此链接:https://stackoverflow.com/A/35822500/5039001

如果您想返回一个json序列化字符串,那么只需返回该字符串。Spring在这种情况下将使用StringHttpMessageConverter而不是JSON转换器。

 类似资料:
  • 问题内容: 我在Spring Boot中有一个示例RestController: 我正在使用JSON库 当我点击API时,我得到一个异常提示: 路径为[]的Servlet [dispatcherServlet]的Servlet.service()抛出异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:未找到类型为org.json.JSONObject

  • 我希望在spring boot中返回类似以下内容的json响应: 我的RestController如下所示 但我得到的反应是这样的

  • 我使用的是Spring版本4(Spring data),我想将Object作为JSON返回,我想知道以下代码即使不使用xmlRootElement注释用户类也能工作: 任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?

  • 问题内容: 我有下表: 我想查询按分组的对象数组。结果中应单独显示。结果应如下所示: 使用还是都没有关系。 但是,我能做的最好的事情是: 哪个返回: 在对象中添加一个额外的键,我想摆脱它。我应该使用哪个SQL(Postgres)查询? 问题答案: [](https://www.postgresql.org/docs/current/functions- json.html#FUNCTIONS-JS

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

  • 我正在使用dropwizard和jersey2 rest客户端,我得到 然而,当我打开日志记录时,我看到 我怎样才能反序列化这个响应,而不是只得到400? 我的代码看起来像 亚洲账户基本上是空的 我添加了apiVerson,时间戳和错误到亚洲帐户,但它仍然不工作。任何帮助都很感激。