spring @Controller和@RestController注释之间的区别。
@Controller注释可以同时用于Web MVC和REST应用程序吗? 如果是,我们如何区分它是Web MVC还是REST应用程序?
spring @Controller和@RestController注释之间的区别。
@Controller注释可以同时用于Web MVC和REST应用程序吗? 如果是,我们如何区分它是Web MVC还是REST应用程序?
当前回答
Spring4+中的新@RestController注释,它将类标记为控制器,其中每个方法返回一个域对象而不是视图。它是@Controller和@ResponseBody滚动在一起的简写。
其他回答
@RestController注释类与@Controller相同,但处理器方法上的@ResponseBody是隐含的。
而不是使用@Controller和@ResponseBody, @RestController让你在Spring 4.0和更高版本中公开Rest api。
@RestController是Spring 4.0.1以来提供的。这些控制器表明这里的@RequestMapping方法默认采用@ResponseBody语义。
在早期版本中,类似的功能可以通过使用以下方法实现:
@RequestMapping加上@ResponseBody,比如@RequestMapping(value = "/abc", method = RequestMethod。GET,生成="application/xml" MyBean获取(){ 返回新的MyBean("hi") } <mvc:annotation-driven/>可以作为使用JSON和Jackson或xml的方式之一。 MyBean可以这样定义
@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) 公共类MyBean{ field1 field2 . . / / getter、setter }
@ResponseBody在这里被视为MVC中的视图,它直接被分派,而不是从Dispatcher Servlet分派,各自的转换器将响应转换为相关的格式,如text/html, application/xml, application/json。
但是,Restcontroller已经与ResponseBody和各自的转换器耦合。其次,在这里,由于不是转换responsebody,而是自动转换为http response。
@RestController是@Controller和@ResponseBody的组合,如果我们在方法签名中不使用@ResponseBody,那么我们需要使用@RestController。
在下面的代码中,我将向您展示两者的区别 @ 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默认是激活的。您不需要将它添加到函数签名之上。