一尘不染

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

spring-boot

我在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:未找到类型为org.json.JSONObject]的返回值的转换器,其根本原因是

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

有什么问题 有人可以解释到底发生了什么吗?


阅读 623

收藏
2020-05-30

共1个答案

一尘不染

当您使用Spring Boot Web时,Jackson依赖关系是隐式的,我们不必显式定义。pom.xml如果使用eclipse
,则可以在依赖项层次结构选项卡中检查Jackson依赖项。

并且正如您所注释的那样,@RestController无需进行显式的json转换。只需返回一个POJO,杰克逊序列化器将负责转换为json。@ResponseBody与@Controller
一起使用时,等效于使用。而不是放置@ResponseBody在每个控制器方法上,我们放置的@RestController不是香草@Controller,而是@ResponseBody默认情况下应用于该控制器中的所有资源。

您面临的问题是因为返回的对象(JSONObject)没有某些属性的吸气剂。您的意图不是序列化此JSONObject而是序列化POJO。因此,只需返回POJO。

如果要返回json序列化的字符串,则只需返回该字符串。在这种情况下,Spring将使用StringHttpMessageConverter而不是JSON转换器。

2020-05-30