spring @Controller和@RestController注释之间的区别。
@Controller注释可以同时用于Web MVC和REST应用程序吗? 如果是,我们如何区分它是Web MVC还是REST应用程序?
spring @Controller和@RestController注释之间的区别。
@Controller注释可以同时用于Web MVC和REST应用程序吗? 如果是,我们如何区分它是Web MVC还是REST应用程序?
当前回答
正如您在Spring文档(Spring RestController documentation)中看到的,RestController注释与Controller注释相同,但假设@ResponseBody默认是活动的,因此所有Java对象都被序列化为响应体中的JSON表示。
其他回答
@RestController是@Controller和@ResponseBody的组合。
@Controller类中的请求流,不使用@ResponseBody注释:
@RestController返回一个对象作为响应而不是视图。
正如您在Spring文档(Spring RestController documentation)中看到的,RestController注释与Controller注释相同,但假设@ResponseBody默认是活动的,因此所有Java对象都被序列化为响应体中的JSON表示。
而不是使用@Controller和@ResponseBody, @RestController让你在Spring 4.0和更高版本中公开Rest api。
在下面的代码中,我将向您展示两者的区别 @ controller之间
@Controller
public class RestClassName{
@RequestMapping(value={"/uri"})
@ResponseBody
public ObjectResponse functionRestName(){
//...
return instance;
}
}
和@RestController
@RestController
public class RestClassName{
@RequestMapping(value={"/uri"})
public ObjectResponse functionRestName(){
//...
return instance;
}
}
@ResponseBody默认是激活的。您不需要将它添加到函数签名之上。
@Controller用于将类标记为Spring MVC Controller。 @RestController是一个方便的注释,它只添加了@Controller和@ResponseBody注释(参见:Javadoc)。
所以下面两个控制器定义应该做同样的事情
@Controller
@ResponseBody
public class MyController { }
@RestController
public class MyRestController { }