设为首页 加入收藏

TOP

day11-JSON处理和HttpMessageConverter<T>(一)
2023-07-25 21:43:37 】 浏览:59
Tags:day11-JSON HttpMessageConverter< T>

JOSN处理和HttpMessageConverter< T>

1.JSON处理-@ResponseBody

说明:在实际开发中,我们往往需要服务器返回的数据都是 JSON 格式。

SpringMVC 提供了 @ResponseBody 注解,用来标注 Controller 方法的返回的格式为 JSON,将 Java 对象或集合转为 JSON 格式的数据。

方法返回的对象通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区,通常用来返回 JSON 数据或者是 XML 数据。

注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,它的效果等同于通过 response对象输出指定格式的数据。

使用案例

下面是要完成的效果:请求目标方法,目标方法返回一个json格式的数据

image-20230215223829398 image-20230215223837651

(1)引入处理JSON需要的jar包,注意spring5.x 需要使用jackson-2.9.x.jar 的包。

image-20230215224152052

(2)创建 json.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>json提交</title>
    <!--引入jquery-->
    <script type="text/java script" src="script/jquery-3.6.0.min.js"></script>
    <!--使用jquery的ajax-->
    <script type="text/java script">
        $(function () {
            //给id=getJson的超链接绑定一个事件
            $("#getJson").click(function () {
                var href = this.href;
                var args = {"time": new Date()};
                $.get(
                    href,//请求url
                    args,//发送时间,防止浏览器缓存
                    function (data) {
                        console.log("data=", data)
                    },
                    "json"//指定返回的格式
                )
                return false;//超链接不跳转
            })
        })
    </script>
</head>
<body>
<h1>请求一个json数据</h1>
<a href="<%=request.getContextPath()%>/json/dog" id="getJson">点击获取json数据</a>
</body>
</html>

(3)创建 Javabean 作为返回的数据

package com.li.web.json.entity;

/**
 * @author 李
 * @version 1.0
 */
public class Dog {
    private String name;
    private String address;

    public Dog() {
    }

    public Dog(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

(4)创建 JsonHandler 处理请求

package com.li.web.json;

import com.li.web.json.entity.Dog;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author 李
 * @version 1.0
 */
@Controller
public class JsonHandler {
    /**
     * 1.目标方法的 @ResponseBody注解表示返回的数据是json格式
     * 2.SpringMVC 底层根据目标方法@ResponseBody,返回指定格式
     *  返回的格式根据http请求来处理
     * 3.底层原理之前在实现SpringMVC底层机制时讲过,
     *  这里原生的SpringMVC使用了转换器 HttpMessageConverter
     * @return
     */
    @RequestMapping(value = "/json/dog")
    @ResponseBody
    public Dog getJson(){
        //返回对象
        //SpringMVC 会根据你的设置,转成json格式数据返回
        Dog dog = new Dog();
        dog.setName("大黄狗");
        dog.setAddress("小新的家");
        return dog;
    }
}

(5)启动tomcat,访问json.jsp页面。点击超链接,返回如下信息:

image-20230216185528825

2.JSON处理-@RequestBody

和 @ResponseBody 注解相反,@RequestBody 注解是将客户端提交的 json数据,封装成 Javabean 对象。

注意:@RequestBody 用于修饰参数。

应用案例

在前端页面发出一个json数据,后端接收数据,并使用 @RequestBody 注解将 json 数据转成 Javabean 对象,然后使用 @ResponseBody 注解将该 Javabean 对象转回 json 数据,返回给前端。

(1)修改json.jsp,增加发送 json 数据代码

这里使用 ajax 请求的 contentType 指定发送格式为 json,发送请求时会被封装到请求头中。这样后端在接收时,根据 contentType 能知道数据是 json 格式的。

<%@ page contentType="text/html;charset=UTF-8" language=&qu
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇《RPC实战与核心原理》学习笔记Da.. 下一篇红黑树——一种自平衡的二叉树

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目