java - spring中将@Controller替换为@RestController的效果

标签 java spring core

能否将@Controller替换为@RestController,反之亦然,对应用有何影响。

最佳答案

简单来说,@Controller 是 Spring MVC 注释,在使用 @Controller 时,您需要为每个请求映射添加 @ResponseBody`

示例:

 @Controller
 @RequestMapping("employees")
 public class EmployeeController {
 Employee employee = new Employee();
 @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
 public @ResponseBody Employee getEmployeeInJSON(@PathVariable String name) {
   employee.setName(name);
   employee.setEmail("employee1@genuitec.com");
 return employee; 
    }
 @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml")
 public @ResponseBody Employee getEmployeeInXML(@PathVariable String name)  {
   employee.setName(name);
  employee.setEmail("employee1@genuitec.com");
   return employee; 
   }
}

Spring 4.0引入了@RestController,这是 Controller 的一个特殊版本,它是一个方便的注释,除了添加@Controller@ResponseBody 注释。通过使用@RestController注解来注解 Controller 类,您不再需要在所有请求映射方法中添加@ResponseBody。

示例:

 @RestController
 @RequestMapping("employees")
 public class EmployeeController {
 Employee employee = new Employee();
 @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
 public Employee getEmployeeInJSON(@PathVariable String name) {
   employee.setName(name);
   employee.setEmail("employee1@genuitec.com");
   return employee;
 }
 @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml")
 public Employee getEmployeeInXML(@PathVariable String name) {
   employee.setName(name);
   employee.setEmail("employee1@genuitec.com");
 return employee; 
   } 
 }

所以最后的结论是,如果您想用 @Controller 替换 @RestController ,您需要显式地将 @ResponseBody 添加到所有请求映射中

关于java - spring中将@Controller替换为@RestController的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583720/

相关文章:

java - 从外部 JAR 文件加载 Spring 组件

java - 如何将参数传递给自定义适配器?

java - JAX-WS 线程占用 %100 CPU

linux - 为什么我的核心文件没有被覆盖?

java - 默认构造函数的隐式 super 构造函数 Num() 未定义。必须定义一个显式的构造函数,这背后的逻辑是什么

java - 为什么@EnableWs从spring bean中删除aop代理

java - 如何阻止 m2eclipse 插件干扰命令行 mvn 构建?

java - 如何在另一个类的方法中使用一个类的字段名称,这样如果名称更改就会出现编译器问题

java - Autowiring 不会限制 IoC 的目标吗?

php - debug_backtrace() 在 php 中到底有什么作用?