工作项目中,后端Controller返回值时,都会统一包装为一个自定义的ResponseData对象,便于统一接受和处理。这里梳理一下其中涉及到的知识点。
自定义响应对象
首先,这个自定义对象作为封装返回信息,需要有基本的一些信息:响应头、响应体。响应头一般用另一个对象定义,需要包含:状态码、响应信息等。
其次,设置多个静态方法,用于快速生成不同类型的ResponseData对象,一般常见的有: success() success(Stirng msg) fail() fail(String msg)等,按需求定义即可。
//因为用于前后端传输,因此要实现Serializable接口。
//响应体内容类型不确定,因此用泛型接收。
public Class ResponseData<T> implements Serializable{
private Head head;//自定义响应头
private T body;
public static <T> ResponseData<T> success(){
ResponseData data = new ResponseData()
data.setHead....
return data;
}
}
这样,在controller中就能够将任意类型的数据封装到统一的响应对象中返回了。
为什么直接返回自定义对象前端能解析到?
正常来说我们应该返回一个HttpResponse类型的对象,但是直接返回自定义的对象也可以。这是因为因为使用了@RestController注解。
@RestController是一个组合注解,它包含了@Controller和@ResponseBody 注解的功能。
- @Controller:用于将当前类注册为一个Spring组件,并标识为控制器。
- @ResponseBody:该注解表示当前类方法的返回值会直接作为HTTP响应的内容,而不是进行渲染。
使用@ResponseBody注解后,会自动进行序列化和反序列化进行数据的传输,Spring默认使用JSON格式的序列化器进行传输。
因此,我们return的 ResponseData 对象,就会被序列化为JSON字符串,放入HttpServletResponse对象中通过HTTP请求传输回前端。