SpringMVC: interacción de datos JSON

Interacción de datos JSON

El front-end se puede escribir en muchos idiomas, pero básicamente el back-end se desarrolla en Java. Además de C ++ (ciclo de desarrollo largo), PHP y #Net (velocidad de búsqueda, desarrollo rápido), estos tres tipos también se pueden escribir en el back-end.

Los navegadores y los programas de Java usan jsp, js.

Android, el cliente IOS y los programas Java se relacionan entre sí y envían cadenas JSON. El programa Java lo recibe, analiza la cadena JSON, forma un objeto POJO y luego realiza el procesamiento comercial. Después del procesamiento, se convierte en un POJO o un objeto de clase contenedor o una colección de Lista, que se convierte en una cadena JSON y se envía de nuevo a los clientes Android e IOS.

Entonces, si domina la interacción de datos JSON, no necesita preocuparse en qué idioma se desarrolla el front-end.

Estructura del proyecto

tarro 包

Clase de entidad Student.java

@Component
@Scope("prototype")
public class Student {
    private int id;
    private String name;
    private int age;
    private float score;

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

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

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public float getScore() { return score; }

    public void setScore(float score) { this.score = score; }
}

La página de inicio index.jsp usa ajax para iniciar la solicitud

Si desea solicitar texto sin formato (cadena), cambie el valor de dateType a texto.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSON</title>
</head>
<body>
<form>
    学号:<input type="text" id="id"><br/>
    <button type="button" id="btn">查询学生信息</button>
</form>
<p id="show"></p>

<%-- <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script> --%>
<script src="js/jquery-3.4.1.min.js" type="text/javascript"></script>
<script>
    $("#btn").click(function () {
        $.ajax({
            //开头不能加/,但可以加 ${pageContext.request.contextPath}/
            url: "studentController/queryStudent",
            type: "post",
            // 传给后台的数据类型、使用的字符集。可以缺省,因为data:{},看到{}就会自动作为json处理
            // contentType:"application/json;charset=utf-8",
            //传给后台的数据,json形式,key是String类型,value可以是多种类型,键值对之间逗号分隔
            data: {"id": $("#id").val()},
            //期待的返回值类型(回调函数的参数类型)
            dataType: "json",
            error: function () {
                console.log("ajax请求数据失败!");
            },
            success: function (data) {
                //浏览器把接受到的json数据作为js对象,可通过.调用属性
                var info = "姓名:" + data.name + ",年龄:" + data.age + ",成绩:" + data.score;
                $("#show").text(info);
            }
        })
    });
</script>
</body>
</html>

El fondo usa el controlador para manejar solicitudes ajax

Puede usar el tipo de datos simple para recibir los datos desde el front-end, o puede usar Bean para recibirlos (se asignará al atributo con el mismo nombre).

Muchos tutoriales dicen que necesita agregar @RequestBody delante de los parámetros del método comercial para convertir los datos de ajax al tipo requerido;

De hecho, con el reemplazo de la versión, el convertidor incorporado de la versión superior de SpringMVC ya puede convertir los datos transmitidos por ajax al tipo requerido, y agregar @RequestBody causará un error.

 

Debe agregar la anotación @ResponseBody en el método comercial, donde la solución agregará automáticamente el valor de retorno al cuerpo de respuesta para responder a la solicitud ajax.

No importa si la solicitud es de texto o json, debe usar @ResponseBody.

 

Si la solicitud es texto, escriba el tipo de valor de retorno como String;

Si la solicitud es json, el valor de retorno puede escribirse como un bean (devolver un objeto json, como solicitar información de un alumno), o puede escribirse como una lista (devolver una matriz json, como solicitar información de múltiples alumnos).

@Controller
@RequestMapping("studentController")
public class StudentController {
    private Student student;

    @Autowired
    public void setStudent(Student student) {
        this.student = student;
    }

    @RequestMapping("/queryStudent")
    @ResponseBody
    public Student queryStudent(int id) {
        System.out.println(id);
        //此处省略连接数据库查询
        student.setName("chy");
        student.setAge(20);
        student.setScore(100);
        return student;
    }
}

springmvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.2.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!--
        可以扫描controller、service、...
        这里让扫描controller,指定controller的包
     -->
    <context:component-scan base-package="org.haiwen"></context:component-scan>

    <!-- 开启spring对mvc的注解支持(全注解一定要配置) -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 解决Controller返回json中文乱码问题 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- 静态资源放行 -->
    <mvc:default-servlet-handler />

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize">
            <value>10000000000</value> <!-- 以字节byte为单位 -->
        </property>
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

    <!-- 配置SpringMVC的核心控制器DispatcherServlet(负责所有请求的公共功能,然后在分发给具体的控制器(我们编写的控制器),完成业务逻辑,响应视图。) -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--
            服务器在启动的时候,去加载springmvc的配置文件
            如果不配置就默认去WEB-INF文件夹下找:<servlet-name>-servlet.xml的配置(这种方式需要拷贝配置文件到WEB-INF)
         -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- Servlet容器启动的时候就进行初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- 请求的入口,所有请求都会经过DispatcherServlet处理   /:支持RESTful风格 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <!-- 配置编码过滤器 ==>目的:解决SpringMVC post提交数据时的乱码问题  -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

Prueba

202 artículos originales publicados · elogiados 37 · 30,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/lovecuidong/article/details/104560740
Recomendado
Clasificación