0
点赞
收藏
分享

微信扫一扫

SpringMVC之JSON

您好 2022-04-13 阅读 57
java

一、什么是JSON

  • JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
  • 采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:

  • 对象:{'bid':1,'bname':'java入门到入土'} 
  • 数组:{1,2,3,4,5..} 
  • 混合:{'total':81,row:[{'bid':1,'bname':'java入门到入土'},{'bid':2,'bname':'php入门到入土'}...]}

二、SpringMVC中JSON的配置环境

1.在pom.xl中导入JSON依赖

    <!--<json.version>2.9.3</json.version>-->
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>

2.在spring核心控制器中配置JSON消息转换器

    <!--但是,从spring3.1开始DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter的使用已经过时-->
    <!--spring3.1开始我们应该用RequestMappingHandlerMapping来替换DefaultAnnotationHandlerMapping,-->
    <!--spring3.1开始我们应该用用RequestMappingHandlerAdapter来替换AnnotationMethodHandlerAdapter-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>
    <bean id="mappingJackson2HttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <!--处理中文乱码以及避免IE执行AJAX时,返回JSON出现下载文件-->
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>

三、Controller返回多种类型的JSON数据

1.返回List<T>类型的JSON数据

    /**
     * 返回List<T>类型的Json数据
     * @param book
     * @param req
     * @return
     */
    @RequestMapping("/queryListBook")
    @ResponseBody
    public List<Book> queryListBook(Book book,HttpServletRequest req){
        PageBean pageBean=new PageBean();
        pageBean.setRequest(req);
        List<Book> books=bookService.queryBookPager(book,pageBean);
        return books;
    }

2.返回Map类型的JSON数据

    /**
     * 返回Map类型的JSON数据
     * @param bid
     * @return
     */
    @RequestMapping("/querySingleMap")
    @ResponseBody
    public Map<String,Object> querySingleMap(Integer bid){
        return bookService.querySingleMap(bid);
    }

3.返回List<Map<String,Object>>类型的JSON数据

    /**
     * 返回List<Map<>>类型的JSON数据
     * @return
     */
    @RequestMapping("/queryMapList")
    @ResponseBody
    public List<Map<String,Object>> queryMapList(){
        return bookService.queryMapList();
    }

4.返回对象类型的JSON数据

     /**
     * 返回对象类型的JSON数据
     * @param bid
     * @return
     */
    @RequestMapping("/querySingleBook")
    @ResponseBody
    public Book querySingleBook(Integer bid){
        Book book=bookService.selectByPrimaryKey(bid);
        return book;
    }

5.返回String类型的JSON数据

     /**
     * 返回String类型的Json数据
     * @return
     */
    @RequestMapping("/queryStr")
    @ResponseBody
    public String queryStr(){

        return "book/bookList";
    }

6.返回混合类型的JSON数据

     /**
     * 返回混合类型的Json数据
     * @param book
     * @param req
     * @return
     */
    @RequestMapping("/queryListBook1")
    @ResponseBody
    public Map<String,Object> queryListBook1(Book book,HttpServletRequest req){
        PageBean pageBean=new PageBean();
        pageBean.setRequest(req);
        List<Book> books=bookService.queryBookPager(book,pageBean);
        Map<String,Object> json=new HashMap<>();
        json.put("total",pageBean.getTotal());
        json.put("rows",books);
        return json;
    }

四、常用注解

1.@ResponseBody

作用:绕开视图解析器,将java对象转为json格式的数据。

 2.@JsonIgnore

作用:用来忽略某些字段,可以用在变量或者Get方法上,用在Set方法时,和变量效果一样。这个注解一般用在我们要忽略的字段上。

3.@JsonFormat

作用:帮我们完成格式转换

4.@JsonProperty

作用:在返回实体类的JSON数据格式时,给此字段取别名 只在返回实体类时有效

举报

相关推荐

0 条评论