java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > ResponseEntity作为的返回值

使用ResponseEntity作为的返回值的应用

作者:DanceDonkey

这篇文章主要介绍了使用ResponseEntity作为的返回值的应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

ResponseEntity作为的返回值

通常如果后端想响应json数据,我们需要在方法体上添加@Response注解,标注这个注解的方法的返回值会被spingmvc转为json形式并写入到响应体中。

但ResponseEntity则不会被springmvc转换,可以使用这个类定义响应头,状态码,响应体等。

@Controller
public class ResponseBodyTest {

    @ResponseBody
    @GetMapping("b1")
    public R b1(){
        //将方法的返回值转为json写入到响应体中
        return R.ok().put("msg","success");
    }

	@ResponseBody
    @GetMapping("b2")
    public ResponseEntity<String> b2(){
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.TEXT_PLAIN);
        String str = "hello,world";
        ResponseEntity responseEntity = new ResponseEntity<String>(str,httpHeaders,HttpStatus.OK);
        return responseEntity;
    }

}

我们 /b2 请求设置了@ResponseBody注解,但由于返回的是ResponseEntity对象,而且我们又重新设置了响应类型为 text/plain,我们访问b2请求查看结果:

心得

ResponseEntity的优先级高于@ResponseBody。

在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。

简单的说@ResponseBody可以直接返回Json结果, @ResponseEntity不仅可以返回json结果,还可以定义返回的HttpHeaders和HttpStatus。

统一结果返回 ResponseEntity

在正规的严格的企业的前后端系统开发中,返回严谨的状态码很有必要

平常大家为了统一格式返回,或许会自己封装一个ResultUtils,然后自定义ResultCode枚举类来返回,这样有些麻烦;

我们可以使用SpringMVC为我们封装的ResponseEntity对象来自定义状态码

源码:

public class ResponseEntity<T> extends HttpEntity<T> {
    private final Object status;

    public ResponseEntity(HttpStatus status) {
        this((Object)null, (MultiValueMap)null, (HttpStatus)status);
    }

    public ResponseEntity(@Nullable T body, HttpStatus status) {
        this(body, (MultiValueMap)null, (HttpStatus)status);
    }

    public ResponseEntity(MultiValueMap<String, String> headers, HttpStatus status) {
        this((Object)null, headers, (HttpStatus)status);
    }

    public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
        super(body, headers);
        Assert.notNull(status, "HttpStatus must not be null");
        this.status = status;
    }

    private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
        super(body, headers);
        Assert.notNull(status, "HttpStatus must not be null");
        this.status = status;
    }

@param body: the entity body

@param headers : the entity headers

@param status: the status code

HttpStatus status是一个包含了各种响应状态码的枚举类

// 201:创建成功   Created
// 203 :没有认证   NON_AUTHORITATIVE_INFORMATION
// 204: 成功没有返回值 No-content  一般是delete,update时使用
.....

例子:

	@GetMapping("/categories")
    public ResponseEntity<List<Category>> getCategoryList(String token){
        return new ResponseEntity<>(categoryService.queryAll(), HttpStatus.OK);
    }

    @PostMapping("/categories")
    public ResponseEntity<Category> AddCategory(String token, @RequestBody Category category){
        
        return new ResponseEntity<>(categoryService.insert(category),HttpStatus.CREATED);
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文