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

Java Spring如何将@RestController的对象自动转换为json,java,json,spring,Java,Json,Spring,我正在看一段代码,其中我假设spring决定在幕后使用Jackson将@RestController的对象自动转换为json @RestController @RequestMapping("/api") public class ApiController { private RoomServices roomServices; @Autowired public ApiController(RoomServices roomServices)

我正在看一段代码,其中我假设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();
    }
}
@RestController
@请求映射(“/api”)
公共类ApiController{
私人客房服务;
@自动连线
公共ApiController(客房服务客房服务){
this.roomServices=roomServices;
}
@GetMapping(“/rooms”)
公共列表getAllRooms(){
返回此.roomServices.getAllRooms();
}
}
Room类只是一个普通的java类,带有一些字段、getter/setter。代码中没有Jackson或任何其他显式序列化。尽管在检查url时会返回json。我试着浏览spring文档,但我不太确定我在寻找什么。spring中这个过程的名称是什么/它是如何工作的?我试着只使用@Controller,结果它坏了。此功能是否来自@RestController?

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

Spring使用它的AOP机制拦截@Controller中的映射方法(您可以看到它实际上是带有@ResponseBy的@Controller),Spring为带有@Controller注释的类创建代理对象(使用JDK代理或通过cglib)


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

在方法上使用
@ResponseBody
,并且
@Controller
也应该可以工作!谢谢,还有其他情况下spring会自动转换吗?或者这只是针对@ResponseBody?据我所知,json转换只是针对@ResponseBody。但是AOP机制在很多地方都有使用,比如事务性的、可缓存的等等。哦@将Json字符串转换为对象的RequestBody也是自动转换。