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

Spring如何将对象自动转换为json以@RestController

慕承允
2023-03-14

我正在看的代码中,我假设spring决定在幕后使用Jackson来为@RestController将对象自动转换为json

@RestController 
@RequestMapping("/api")
public class ApiController {

    private RoomServices roomServices;

    @Autowired
    public ApiController(RoomServices roomServices) {
        this.roomServices = roomServices;
    }

    @GetMapping("/rooms")
    public List<Room> getAllRooms() {
        return this.roomServices.getAllRooms();
    }
}

Room类只是一个普通的java类,带有一些字段、getter/setter。代码中没有Jackson或任何其他显式的序列化。虽然这在检查url时确实会返回json。我试着浏览spring文档,但是我不确定我在找什么。spring中这一过程的名称是什么/它是如何工作的?我用@Controller试了一下,它坏了。这个功能是来自@RestController吗?

共有1个答案

刁俊人
2023-03-14

如果您使用Spring Boot Starter Web,您可以看到它通过编译依赖项使用Spring Boot Starter JSON,而Jackson是Start JSON库的依赖项。所以,你的假设是对的(Spring默认使用Jackson进行Json转换)

Spring使用它的AOP机制来拦截@Controller中的映射方法(你可以看到@RestController实际上是一个@Controller和@Response seBody),Spring为用@Controller注释的类创建一个代理对象(使用JDK代理或通过cglib)。

当处理请求流时,真正调用映射方法的程序将首先被引导到代理,代理将调用real @Controller对象的方法,并使用Jackson库将其返回值转换为Json字符串(如果该方法用@ResponseBody进行了注释),然后将Json字符串返回给调用程序。

 类似资料:
  • 我有一个字符串(jsonData)通过Jackson对象映射器映射到json,如下所示,映射到JaxB。 我能够很好地映射到上面的字符串。然而,我在映射到jooq JSON对象时遇到了问题。我想我现在必须将jsonData转换为jooq JSON。 我该怎么做? 或者我必须创建某种包装? 由jooq配置的DTO

  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 我正试图将下面的json转换成java bean,需要你的帮助 Sort.json 我的豆子看起来像 我的测试课是 我看到的错误是 请建议:

  • 问题内容: 我需要知道如何将动态python对象转换为JSON。该对象必须能够具有多个级别的对象子对象。例如: 使用python 2.6的以下代码: 产生以下错误: 我不知道用户可能放入哪种子对象。是否有足够聪明的解决方案来检测属性是否是对象并自动对其进行解析? 更新 为在上包含子对象。 问题答案: 指定参数(doc):

  • 问题内容: 我有一个看起来像这样的JSON对象: 我想将其转换为如下所示的HTML表: 谁能告诉我如何实现这一目标? 问题答案: 使用jQuery非常简单: 这是工作提琴的链接。 更新: 实现此目的的另一种方法是使用称为dynatable的库将JSON转换为可排序的表。

  • 问题内容: 我从远程REST服务器读取了JSON对象。此JSON对象具有Typescript类的所有属性(通过设计)。如何将收到的JSON对象转换为var类型? 我不想填充一个打字稿变量(即有一个采用此JSON对象的构造函数)。它很大,因此要按子对象和按属性逐个复制所有内容,这将花费大量时间。 问题答案: 您不能简单地将Ajax请求中的原始JavaScript结果转换为原型JavaScript /