下面是关于“@Controller、@RestController注解区别详解”的完整攻略。
一、@Controller注解
@Controller
是SpringMVC中常用的控制器注解,用于标记此类为控制器,能够处理用户的请求并返回相应的数据。
1.1 示例代码
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/world")
public String sayHello() {
return "hello world";
}
}
上述代码定义了一个HelloController
控制器处理/hello/world
的请求,返回字符串"hello world"。
需要说明的是,@RequestMapping
注解用来匹配请求路径。
1.2 返回值类型
@Controller
控制器方法的返回值类型可以是字符串、ModelAndView或void类型。
如果是字符串类型,则对应视图名称;如果是ModelAndView类型,则可以传递视图名称和模型数据;如果是void类型,则需要配合@RequestMapping
的produces属性使用,指定返回数据类型。
1.3 视图解析器
@Controller
控制器返回字符串类型时,需要配合视图解析器处理视图。
在SpringMVC配置文件中,可以配置多个视图解析器,优先级按照配置的顺序逐个匹配。
示例配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
二、@RestController注解
@RestController
是Spring4.0版本新增的注解,主要用于构建RESTful风格的API接口,一般情况下将返回数据直接作为响应体返回。
相比于使用@Controller
注解,使用@RestController
注解的控制器返回值不会被视图解析器解析,而是以JSON、XML等格式直接返回数据给客户端。
使用这个注解可以大大简化开发,并提高数据传输效率,常用于前后端分离的开发模式。
2.1 示例代码
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
User user = new User(id, "Tom", 18);
return user;
}
}
上述代码定义了一个ApiController
控制器处理/api/user/{id}
的GET请求,返回一个User对象。
需要说明的是,@PathVariable
注解用于RESTful风格的URL路径参数获取。
2.2 返回值类型
@RestController
控制器方法的返回值类型可以是任意Java类,SpringMVC会自动将该对象转化为JSON或XML格式返回给客户端。
同时,也可以使用@ResponseBody
注解,将数据转化为JSON或XML格式返回。
2.3 内容协商 Content Negotiation
当使用@RestController
注解时,在返回值类型为HttpEntity<T>
时,可以通过controller方法中设置响应头来控制输出格式:
@GetMapping(value = "/{id}", produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public HttpEntity<User> getUser(@PathVariable Long id) {
User user = new User(id, "Tom", 18);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
由于Spring MVC使用了内容协商 Content Negotiation 来输出数据,我们还可以设置在请求头中 Accept 来控制输出数据的格式。
总结
@RestController
相对于@Controller
,主要是增加了对RESTful API的支持,也就是直接将返回结果作为json/xml输出给客户端,而不需要使用@ResponseBody
来配合。
当我们需要返回数据时,如果是直接输出json/xml数据格式,那么应该使用 @RestController
;如果需要跳转页面,则应该使用 @Controller
。
以上是关于“@Controller、@RestController注解区别详解”的攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Controller、@RestController注解区别详解 - Python技术站