SpringMVC常见的返回值类型及其示例

文章目录

      • 1. ModelAndView
      • 2. String【推荐】
      • 3. void
      • 4. ResponseEntity
      • 5. HttpEntity
      • 6. @ResponseBody
      • 7. @RestController

SpringMVC是目前Java Web开发中非常流行的框架之一,在控制器方法中,正确使用合适的返回值类型,可以让我们的开发变得更加高效、规范,同时也可以提升代码的可读性。本文将结合Java代码示例,介绍SpringMVC常见的返回值类型以及它们的用途。

1. ModelAndView

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

2. String【推荐】

String类型的返回值通常用于在控制器方法中返回视图名称,下述示例通过String类型的返回值直接返回了视图名称”hello”。

@RequestMapping("/hello")
public String hello() {
    return "hello";//根据配置的前缀后缀跳转
    //return "redirect:/hello"  重定向:增删改,防止重复提交数据
    //return "forward:/hello"   转发:查询
}

3. void

void类型的返回值通常用于在控制器方法中不返回任何数据或视图,常用于异步请求或直接输出数据,下述示例通过void类型的返回值,直接将“Hello World!”信息输出到客户端。

@RequestMapping("/hello")
public void hello(HttpServletResponse response) throws IOException {
    response.getWriter().write("Hello World!");
}

4. ResponseEntity

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

5. HttpEntity

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

6. @ResponseBody

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

7. @RestController

@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支持多种类型的返回值,正确使用合适的返回值类型可以让我们的代码更加规范、高效,同时也能提升代码的可读性。

你可能感兴趣的:(java,spring,mvc)