@RestController

  • 使用@Controller时需要用@ResponseBody注释

    Spring 3.x 或使用@Controller情况下,在方法上使用@ResponseBody注释时,Spring会转换返回值并自动将其写入HTTP响应。Controller类中的每个方法都必须使用@ResponseBody进行注释。

    Spring有一个在后台注册的HttpMessageConverters列表。HTTPMessageConverter的职责是将请求主体转换为特定类并再次返回响应主体,具体取决于预定义的mime类型。每次发出请求命中@ResponseBody时,Spring都会遍历所有已注册的HTTPMessageConverters,寻找符合给定mime类型和类的第一个,然后将其用于实际转换。

    @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; 
        }
    }

      

    注意@ResponseBody添加到返回值中的每个@RequestMapping方法,Spring将做两件事:

     

    1. 将<context:component-scan> 和  <mvc:annotation-driven /> 标记添加  到Spring配置文件中。
      • <context:component-scan> 激活注释并扫描包以在应用程序上下文中查找和注册bean。 
      • <mvc:annotation-driven/> 如果Jackson / JAXB库在类路径上,则添加对读写JSON / XML的支持。 
      • 对于JSON格式,包括jackson-databind jar,对于XML,包括项目类路径的jaxb-api-osgi jar。
  • 使用@RestController

    Spring 4.0引入了@RestController,这是一个控制器的专用版本,它是一个方便的注释,除了自动添加@Controller和@ResponseBody注释之外没有其他新魔法。

    通过使用@RestController批注对控制器类进行注释,您不再需要将@ResponseBody添加到所有请求映射方法中。@ResponseBody注释默认处于活动状态。

    要在我们的示例中使用@RestController,我们需要做的就是将@Controller修改为@RestController并从每个方法中删除@ResponseBody。结果类应如下所示:

    @RestController
    public class EmployeeController {
    
        Employee employee = new Employee();
    
        @GetMapping("/employees/{name}")
        public Employee getEmployeeInJSON(@PathVariable("name") String name) {
           employee.setName(name);
           employee.setEmail("employee1@genuitec.com");
           return employee;
        }
     
    }
原文地址:https://www.cnblogs.com/zqzhen/p/12545944.html