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