Java -- SpringMVC学习笔记4、返回对象Object

1、对象Object

处理器方法也可以返回Object对象。这个Object可以是 Integer,String,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。

返回对象,需要使用@ResponseBody注解,将转换后的JSON数据放入到响应体中。

2、环境搭建

  • 添加依赖:
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>
  • 声明注解驱动

将Object数据转化为JSON数据,需要由消息转换器 HttpMessageConverter完成。而转换器的开启,需要由mvc:annotation-driven/来完成。SpringMVC使用消息转换器实现请求数据和对象,处理器方法返回对象和响应输出之间的自动转换。

2.1、返回自定义类型对象

返回自定义类型对象时,不能以对象的形式直接返回给客户端浏览器,而是将对象转换为JSON格式的数据发送给浏览器的。

  • 定义实体类:
public class Student
{
    private String name;
    private int age;
    //getter and setter toString....
}
  • 定义test.jsp页面、引入jQuery、异步请求处理器:
<head>
    <title>Title</title>
    <script src="js/jquery-3.4.1.min.js"></script>
    <script>
        $(document).ready(function () {
            $.ajax({
                url: "myajax.do",
                type: "post",
                dataType: "json",
                success: function (data) {
                    alert(data.name + " " + data.age);
                }
            })
        })
    </script>
</head>
<body>
</body>
</html>
  • 处理器方法:
@ResponseBody
    @RequestMapping(value = "/myajax.do")
    public Student getStudent()
    {
        Student student = new Student();
        student.setName("张三");
        student.setAge(15);
        return student;
    }
  • 在spring配置文件中声明注解驱动:
<!--声明注解驱动-->
<mvc:annotation-driven/>
  • 这样、当访问test.jsp资源时、就会弹出用户信息。

2.2、返回List集合

1、 修改处理器方法:

@ResponseBody
    @RequestMapping(value = "/myajax.do")
    public List<Student> getStudents()
    {
        List<Student> stuList = new ArrayList<>();

        stuList.add(new Student("张三", 18));

        stuList.add(new Student("李四", 17));

        return stuList;
    }

2、在test.jsp循环输出:

<script>
    $(document).ready(function () {
        $.ajax({
            url: "myajax.do",
            type: "post",
            dataType: "json",
            success: function (data) {
                $.each(data, function (i, n) {
                    alert(n.name + " " + n.age);
                })
            }
        })
    })
</script>

2.2、返回字符串对象

若要返回非中文字符串,将前面返回数值型数据的返回值直接修改为字符串即可。但若返回的字符串中带有中文字符、则接收方页面 将会出现乱码 。此时需要使用@RequestMapping的produces性指定字符集。

1、修改处理器方法:

@ResponseBody
@RequestMapping(value = "/myajax.do", produces = "text/plain;charset=utf-8")
public String getStudents()
{
    return "哈哈啥";
}

2、在test.jsp输出:

<script>
    $(document).ready(function () {
        $.ajax({
            url: "myajax.do",
            type: "post",
            success: function (data) {
                alert(data);
            }
        })
    })
</script>
原文地址:https://www.cnblogs.com/dcy521/p/14791938.html