SpringMVC是目前Java Web开发中非常流行的框架之一,在控制器方法中,正确使用合适的返回值类型,可以让我们的开发变得更加高效、规范,同时也可以提升代码的可读性。本文将结合Java代码示例,介绍SpringMVC常见的返回值类型以及它们的用途。
ModelAndView是SpringMVC中最早出现的一种返回值类型,它可以将数据和视图名称一起封装在ModelAndView对象中返回,用于在控制器方法中返回视图以及需要传递到视图的数据。下述示例通过ModelAndView返回了”hello”视图以及需要传递给视图的数据,即“Hello World!”信息。
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello World!");
modelAndView.setViewName("hello");//根据配置的前缀后缀跳转
return modelAndView;
}
String类型的返回值通常用于在控制器方法中返回视图名称,下述示例通过String类型的返回值直接返回了视图名称”hello”。
@RequestMapping("/hello")
public String hello() {
return "hello";//根据配置的前缀后缀跳转
//return "redirect:/hello" 重定向:增删改,防止重复提交数据
//return "forward:/hello" 转发:查询
}
void类型的返回值通常用于在控制器方法中不返回任何数据或视图,常用于异步请求或直接输出数据,下述示例通过void类型的返回值,直接将“Hello World!”信息输出到客户端。
@RequestMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
response.getWriter().write("Hello World!");
}
ResponseEntity类型的返回值通常用于在控制器方法中返回自定义的HTTP响应,下述示例使用了ResponseEntity返回了自定义的HTTP响应,其中包括响应的HTTP状态码、响应头”Custom-Header”以及响应体信息”Hello World!”。
@RequestMapping("/hello")
public ResponseEntity<String> hello() {
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "hello");
return new ResponseEntity<String>("Hello World!", headers, HttpStatus.OK);
}
HttpEntity类型的返回值通常用于在控制器方法中获取请求的详细信息,下述示例通过HttpEntity获取了HTTP请求的头信息和请求体信息,并打印出来。
@RequestMapping("/hello")
public String hello(HttpEntity<String> entity) {
String body = entity.getBody();
HttpHeaders headers = entity.getHeaders();
System.out.println(body); // 请求体
System.out.println(headers); // 请求头
return "hello";
}
@ResponseBody通常用于将==Java对象转换为指定格式(如JSON、XML等)==的响应体返回,常用于RESTful风格的接口。下述示例通过@ResponseBody将Map类型的Java对象转换为JSON格式的响应体并返回。
@RequestMapping("/hello")
@ResponseBody
public Map<String, Object> hello() {
Map<String, Object> map = new HashMap<>();
map.put("message", "Hello World!");
return map;
}
@RestController结合了@Controller和@ResponseBody注解的作用,可以直接返回Java对象而不需要再通过@ResponseBody转换。常用于构建RESTful风格的接口,下述示例使用了@RestController注解和@GetMapping注解,直接返回了Map类型的Java对象,并将其转换为JSON格式的响应体返回。
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public Map<String, Object> hello() {
Map<String, Object> map = new HashMap<>();
map.put("message", "Hello World!");
return map;
}
}
总之,SpringMVC支持多种类型的返回值,正确使用合适的返回值类型可以让我们的代码更加规范、高效,同时也能提升代码的可读性。