发表于: 2017-09-09 22:49:51

1 681


今天完成的事情:学习了一下springmvc返回json参数的几种方式。

1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。

如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 

或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

同样要用jackson的jar包。


2、第二种使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。

利用HttpServletResponse,然后获取response.getOutputStream()或response.getWriter()直接输出。

public class JsonUtil  

{  

    private static Gson gson=new Gson();  

  

    /** 

     * @MethodName : toJson 

     * @Description : 将对象转为JSON串,此方法能够满足大部分需求 

     * @param src :将要被转化的对象 

     * @return :转化后的JSON串 

     */  

    public static String toJson(Object src) {  

        if (src == null) {  

            return gson.toJson(JsonNull.INSTANCE);  

        }  

        return gson.toJson(src);  

    }  

}  


3、第三种利用spring mvc3的注解@ResponseBody

例如

  @ResponseBody  

  @RequestMapping("/list")  

  public List<String> list(ModelMap modelMap) {  

    String hql = "select c from Clothing c ";  

    Page<Clothing> page = new Page<Clothing>();  

    page.setPageSize(6);  

    page  = clothingServiceImpl.queryForPageByHql(page, hql);  

    return page.getResult();  

  } 


如何实现数据转换

      Spring3.0的重要接口:HttpMessageConveter为我们提供了强大的数据转换功能,将我们的请求数据转换为一个java对象,或将java对象转化为特定格式输出等。比如我们常见的从前端注册表单获取json数据并转化为User对象,或前端获取用户信息,后端输出User对象转换为json格式传输给前端等。

spring 为我们提供了众多的HttpMessageConveter实现类,其中我们可能用得最多的三个实现类是

转换器的装配方式有两种,一种是通过注册org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter来装配messageConverters,如下所示:

另一种是启用注解<mvc:annotation-driven /> 

该注解会会初始化7个转换器: 

- ByteArrayHttpMessageConverter 

- StringHttpMessageConverter 

- ResourceHttpMessageConverter 

- SourceHttpMessageConverter 

- XmlAwareFormHttpMessageConverter 

- Jaxb2RootElementHttpMessageConverter 

- MappingJacksonHttpMessageConverter

通过以上两种方法,我们即可完成我们的转换器注册。 

但我们想要在控制层完成数据的输入输出转换,需要通过下列途径: 

1. 使用@RequestBody和@ResponseBody对处理方法进行标注。其中@RequestBody通过合适的HttpMessageConverter将HTTP请求正文转换为我们需要的对象内容。而@ResponseBody则将我们的对象内容通过合适的HttpMessageConverter转换后作为HTTP响应的正文输出。 

2. 使用HttpEntity、ResponseEntity作为处理方法的入参或返回值


明天计划的事情:生成代码,搭环境看看bug。

遇到的问题:今天师姐突然拉了个外门的java进来,说是一起跟项目,但是没说怎么安排.....

收获:之前学习这块的时候用过注解还试过用工具类没整理,现在整理一下


返回列表 返回列表
评论

    分享到