我正在查看代码,其中我假设 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();
}
}
Run Code Online (Sandbox Code Playgroud)
Room 类只是一个普通的 java 类,带有一些字段、getter/setter。代码中没有发生 Jackson 或任何其他显式序列化。虽然这在检查 url 时确实返回 json。我尝试查看 spring 文档,但不太确定我在寻找什么。spring 中这个过程的名称是什么/它是如何工作的?我尝试只使用@Controller,但它坏了。这个功能来自@RestController吗?
如果您使用的是Spring Boot Starter Web,您可以通过编译依赖项看到它使用的是Spring Boot Starter JSON,而 Jackson 是 Start JSON 库的依赖项。所以,你的假设是正确的(Spring 默认使用 Jackson 进行 JSON 转换)
Spring利用它的AOP机制来拦截中的映射方法@Controller(可以看到@RestController实际上是一个@Controllerwith @ResponseBody),spring为带有注释的类创建一个代理对象(使用JDK代理或通过cglib)@Controller。
当请求流处理时,真正调用映射方法的程序将首先被引导到代理,代理将调用真实@Controller对象的方法并使用Jackson Library将其返回值转换为JSON字符串(如果该方法带有注释@ResponseBody)然后将 JSON 字符串返回给调用程序。
| 归档时间: |
|
| 查看次数: |
6784 次 |
| 最近记录: |