springmvc一共有三种方式返回数据
1.通过OutputStream返回,需要自己手动转换成Json格式然后通过OutputStream的write以流的方式返回给客户端
/**
* 最原始的方法 通过outputStream输出
* @param os
* @param name
* @return
* @throws IOException
*/
@RequestMapping("/demo06/test1")
public String test1(OutputStream os, String name) throws IOException {
List<Map<String, Object>> queryAllFood =foodMapper.queryAllFood(name);
JSONArray arry =JSONArray.fromObject(queryAllFood);
String jsonStr =arry.toString();
os.write(jsonStr.getBytes("UTF-8"));
return null;
}
2.加上@ResponseBody注解返回,他会返回一个byte数组
/**
* 用@ResponseBody的方式直接返回,减少流的输出动作
* @param name
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping("/demo06/test2")
public byte [] test2(String name){
List<Map<String, Object>> queryAllFood =foodMapper.queryAllFood(name);
JSONArray arry =JSONArray.fromObject(queryAllFood);
String jsonStr =arry.toString();
return jsonStr.getBytes();
}
3.直接返回对象,springmvc自己帮你转换成json格式
/**
* 配置消息转换器 springmvc自己帮你转换成json格式
* @param name
* @return
*/
@ResponseBody
@RequestMapping("/demo06/test3")
public List<Map<String, Object>> test3(String name){
List<Map<String, Object>> queryAllFood =foodMapper.queryAllFood(name);
return queryAllFood;
}
这个需要一些配置
添加pom.xml
<!--添加消息转换器的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.7</version>
</dependency>
配置mvc-servlet.xml
<!-- 将springmvc注解的action交给springmvc处理 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 配置直接返回对象解析成json的消息转换器 -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html</value>
<value>application/x-www-form-urlencoded</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
配置了这个之后 如果还想用byte返回的方式需要在配置一个bute的消息转换器,不然数据就是一串乱码
<!--配置返回byte数组 然后在解析成json对象的消息转换器-->
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html</value>
<value>application/x-www-form-urlencoded</value>
</list>
</property>
</bean>
配置之后的效果