通过SpringMVC框架响应JSON数据
1. 通过SpringMVC框架响应JSON数据
在SpringMVC框架(含SpringBoot框架)中,当处理请求的方法之前添加了@ResponseBody后,或在控制器类之前使用的是@RestController,处理请求的方法的返回值将作为响应到客户端的数据。
当服务器向客户端响应数据时,SpringMVC框架会使用“转换器”(Converter)将方法的返回值进行转换,及处理响应时的响应头(Response Headers)等内容,针对返回值类型不同,SpringMVC框架还会自动使用不同的转换器。
当响应数据的类型(处理请求的方法的返回值类型)是String时,会自动使用StringHttpMessageConverter转换器,该转换器就会自动将返回的字符串作为数据响应到客户端,并且,还会设置响应头,默认情况下,在响应头中会设置Content-Type属性,其值是text/html; charset=ISO-8859-1,所以,在SpringMVC框架(不含SpringBoot框架)中,默认情况下,响应的String是不支持中文的!
当响应数据的类型是SpringMVC框架默认并不识别的类型时,且当前开发环境添加了jackson-databind依赖,SpringMVC框架会自动使用jackson-databind中的转换器,而jackson-databind中的转换器的工作方式就是将响应结果组织成JSON格式的数据,并且,将响应头中的Content-Type设置成了application/json; charset=UTF-8!
在项目中只需要确保添加了jackson-databind依赖即可,并不需要进行额外的配置,也不需要显式的使用到该框架中的某个类!
如果是使用XML进行相关配置的SpringMVC项目,需要在Spring的配置文件中开启注解驱动,即在配置文件中添加:
<annotation-driven />
总的来说,如果需要SpringMVC框架能够响应JSON格式的数据,需要:
使用@RestController或@ResponseBody注解;
在项目中添加jackson-databind依赖;
自定义处理请求的方法的返回值类型(只要是自定义的类型,就一定是SpringMVC框架默认不识别的类型)
当然,某个控制器类中,如果已经使用了@RestController注解,会表示“当前控制器类中处理的所有请求都将响应数据”,就不会执行转发或重定向的操作了,如果一定要执行转发或重定向,可以:
不使用@RestController注解,而是在每个需要响应数据的方法之前逐一添加@ResponseBody注解;
在使用@RestController的情况下,将需要转发或重定向的方法的返回值类型声明为ModelAndView类型。