首页 > 编程笔记 > Java笔记 阅读:2

Spring MVC返回JSON数据的2种方式(附带实例)

Spring MVC 返回 JSON 数据可以通过两种方式实现:

用注解支持json/string的返回数据

核心问题是通过 @Bean 返回 RequestMappingHandlerAdapter 并添加 MessageConvert,具体代码如下:
// MvcConfig.java
@Configuration
@EnableMvc
@ComponentScan("cn.springmvc")
/**
* 此类用于启动Spring注解,并配置mvc的一些信息
*/
public class MvcConfig {
    @Bean
    public InternalResourceViewResolver viewResolver() {
        System.err.println("init...");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/classes/views/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }
    // 注解转换器处理 json/string
    @Bean
    public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
        RequestMappingHandlerAdapter r = new RequestMappingHandlerAdapter();
        // 注册 Json 转换器,也可以使用其他转换工具
        FastJsonHttpMessageConverter4 json = new FastJsonHttpMessageConverter4();
        json.setDefaultCharset(Charset.forName("UTF-8"));
        json.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
        r.getMessageConverters().add(json);
        // 注册 StringMessageConvert
        r.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
        System.err.println("创建成功,返回------" + r);
        return r;
    }
}

WebMvcConfigurer配置MVC

Spring 中有一个 WebMvcConfigurer 类,只要实现此接口或是它的子类 WebMvcConfigurerAdapter 并添加一些配置,即可实现一些 Spring 的设置。

另外,还需要在实现类上添加 @EnableWebMvc 注解。具体实现代码如下:
// MvcConfig.java
@Configuration
@EnableWebMvc
@ComponentScan("cn.springmvc")
/**
* 此类用于启动Spring注解,并配置mvc的一些信息
*/
public class MvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public InternalResourceViewResolver viewResolver() {
        System.err.println("init...");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/classes/views/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setViewClass(JstlView.class); return viewResolver;
    }
    // 注解转换器处理 json/string
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
        FastJsonHttpMessageConverter4 json = new FastJsonHttpMessageConverter4();
        json.setDefaultCharset(Charset.forName("UTF-8"));
        json.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
        converters.add(json);
        converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
    }
}
需要注意的是,这里采用了第三方的JSON转换工具,所以需要在项目中引入其依赖,并进行上述两种方式的定义。这里采用的是阿里巴巴的 fastjson 工具。

另外,我们需要在定义 Controller 的方法上面加上 @ResponseBody 的注解(Spring MVC @ResponseBody 的作用是把返回值直接写到 HTTP response body 里)。这个 Controller 的方法就是需要关注的地方,它返回 JSON 数据到客户端。另外,这个方法返回的 Object 可以是任何实体类型,在响应到客户端之前都会进行 JSON 格式转换。

相关文章