spring关于json的处理

 

台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在controller中会有不同的解析,但是在controller中返回的json格式的数据都是一样的。

要求的包:

jackson-core-asl-1.9.12.jar,jackson-mapper-asl-1.9.12.jar

 

进行XML配置:

配置json转换器有两种方式,如果是配置了注解适配器org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的话,需要在该适配器中配置json转换器, 如下:
<!-- 用于将对象转换为 JSON  -->  
<bean id="stringConverter"  
    class="org.springframework.http.converter.StringHttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>text/plain;charset=UTF-8</value>  
        </list>  
    </property>  
</bean>  
<bean id="jsonConverter"   class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> 
<bean      class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <ref bean="stringConverter" />  
            <ref bean="jsonConverter" />  
        </list>  
    </property>  
</bean> 
但是如果使用<mvc:annotation-driven />注解驱动的话就不用以上的配置了,默认已经配好了。建议使用这种,比较方便。

包没导入或者没配置都可能出现406的情况

 

controller层处理的示例:

//测试请求的是json串(商品信息),输出json(商品信息)
//@RequestBody将请求的商品信息的json串转成itemsCustom对象
//@ResponseBody将itemsCustom对象转成json输出
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
    return itemsCustom; //由于@ResponseBody注解,将itemsCustom转成json格式返回
}

 

 

手动处理,不用以上的配置:

@RequestMapping("/username/{name}")
    public void username(@PathVariable String name, HttpServletResponse response) {
        if(StringUtils.isBlank(name)) {
            return;
        }
        try {
            name = URLDecoder.decode(name,"UTF-8");
            name = StringEscapeUtils.escapeSql(name);
            StringBuilder hql = new StringBuilder("from User where status!='D'");
            hql.append(" and username like '%" + name + "%'");
            hql.append(" order by userid asc");
            List<User> result = iCommonService.getListByHql(hql.toString(),null);
            JSONArray array = new JSONArray();
            array.addAll(result);
            response.setContentType("text/json;charset=utf-8");
            response.getWriter().write(array.toString());
            response.getWriter().flush();
            response.getWriter().close();
        } catch (Exception e) {
            logger.error(e.getMessage(),e);
        }
    }

 

posted @ 2017-05-11 17:56  malcome  阅读(130)  评论(0)    收藏  举报