springMVC前后端各种类型数据绑定
springmvc使用中,经常需要将用户界面的元素(参数值)传递到controller控制器中进行逻辑处理,即将前端参数值绑定到后端实例(对象)属性上,进行逻辑处理。可以称之为数据绑定。
数据绑定会涉及到各种数据类型,如基本数据类型int,long,double,boolean等,以及包装类型Integer,long,Double等,或者自定义的对象类型,以及使用集合形式,数组形式的作为数据类型的情况,在数据传递中需要注意一些问题。
目录
1.测试第一种数据类型:基本数据类型
2.测试第二种数据类型:基本数据类型的包装类型
3.测试第三种数据类型:数组类型
4.测试第四种数据类型:传递的数据类型为集合类型(List,Set和Map)
5.测试第五种数据类型:传递的数据类型为json或者xml
实例演示
在idea中创建一个maven项目springmvcDataBind,将maven项目结构补全,添加上test目录,以及main目录下的java目录和resources目录。
然后在pom文件中加入需要使用到的jar包依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaomifeng.cn</groupId><artifactId>springmvc-databind</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springmvc-databind Maven Webapp</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-servlet-api</artifactId><version>7.0.64</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.4</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency></dependencies><build><finalName>springmvc-databind</finalName></build>
</project>
接下来配置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_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><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><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>
以及其他的配置文件dispatcher-servelt.xml(和web.xml)位于同一目录下,以及resources目录下的applicationContext.xml配置文件
如下是:dispatcher-servelt.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="com" annotation-config="true"/><mvc:annotation-driven conversion-service="myDateConverter"/><bean id ="myDateConverter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.xiaomifeng1010.common.MyDateConverter"></bean><bean class="org.springframework.core.convert.support.StringToBooleanConverter"></bean></set></property></bean>
</beans>
和applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com" annotation-config="true"/></beans>
然后配置项目的服务器为tomcat,将该项目的war包部署到tomcat
在项目目录中创建controller包,建立DataBindTestController类,启动tomcat,
1.测试第一种数据类型:基本数据类型
@RequestMapping("baseType")@ResponseBodypublic String baseType(long price) {return "价格是:"+price;}
注意上边这样的请求,因为返回值中有中文,在浏览器中,中文会显示为"??"
因此需要处理中文转码的问题(在@RequestMapping注解中加上produces="text/plain;charset=UTF-8")
@RequestMapping(value="baseType",produces="text/plain;charset=UTF-8")@ResponseBodypublic String baseType(double price) {return "价格是:"+price;}
再次请求,返回值就正常显示了
注意,因为数据类型是基本数据类型,因此出入的参数值也必须是基本数据类型,不能不传值,也不能传入其他类型值。
如果不传值,会报500错误
如果传入其他类型的值(price类型是long,赋值字符串),则报400错误
2.测试第二种数据类型:基本数据类型的包装类型
@RequestMapping(value="baseTypeWrapper",produces="text/plain;charset=UTF-8")@ResponseBodypublic String baseTypeWrapper(Double price){return "价格:"+price;}
引用类型和基本数据类型的区别在于,引用类型的值可以为null,所以不给参数赋值也可以
3.测试第三种数据类型:数组类型
@RequestMapping(value = "arrayType")@ResponseBodypublic String arrayType(String[] name) {
// List<String> list=Stream.of(names).distinct().sorted((x, y) -> x.length()-y.length()).collect(Collectors.toList());StringBuilder sbf = new StringBuilder();for(String item : name){sbf.append(item).append(" ");}return sbf.toString();}
为name赋予多个值
3.测试第三种数据类型:自定义的具有相同属性的类
创建实体类包,包下创建Product类和Address类及Corporation类
Product类(多层级对象,包含了Address对象)
package com.xiaomifeng1010.entity;
import java.util.Optional;import lombok.Data;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 14:15*/@Data
public class Product {/*** 产品名*/String name;/*** 产品数量*/Integer amount;/*** 地址*/Address address;
}
Address类
package com.xiaomifeng1010.entity;import lombok.Data;import java.io.Serializable;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 14:20*/
@Data
public class Address implements Serializable {private static final long serialVersionUID = -6389423477748597401L;/*** 省份*/private String province;/*** 市*/private String city;/*** 区*/private String district;/*** 乡镇*/private String town;/*** 村*/private String village;
}
Corporation类
package com.xiaomifeng1010.entity;import lombok.Data;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 14:33*/
@Data
public class Corporation {/*** 公司名*/String name;/*** 公司数量*/Integer amount;
}
进行测试
/*** 测试自定义的类* Product类和Corporation类中都有nmae和amount属性*/@RequestMapping(value = "object")@ResponseBodypublic String object(Product product, Corporation corporation){return product.toString() +"/"+corporation.toString();}
因为两个类中都有name属性和amount属性,所以同时传递给两个对象相同的名字和数量
注意给 Product类中包含的Address对象赋值,只需要用address点出address的属性名
注意:如果想要Product类与Corporation的名字和数量分别赋予不同的值,还需要数据绑定的方法(给每个类设置一个绑定的前缀)
@InitBinder("product")public void initUser(WebDataBinder binder){binder.setFieldDefaultPrefix("product.");}@InitBinder("corporation")public void initAdmin(WebDataBinder binder){binder.setFieldDefaultPrefix("corporation.");}
设置好之后需要重启一下项目(即使tomcat热部署也需要重新启动一下项目,因为这两个方法需要加载controller类的时候,先加载这连个方法,才去执行具体的请求方法)
如果没有设置数据绑定前缀,那么直接用product.name传入参数值,返回的name是null.
4.测试第四种数据类型:传递的数据类型为集合类型(List,Set和Map)
4.1关于List的数据绑定
在Product类基础上,将Product类作为List的元素,创建dto包,包下创建ProductList类(不要在controller中直接使用List<Product>,而是将List<Product>作为ProductList属性)
package com.xiaomifeng1010.dto;import com.xiaomifeng1010.entity.Product;
import lombok.Data;import java.util.List;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 17:25*/
@Data
public class ProductList {private List<Product> products;
}
controller中请求方法,进行测试:
/*** 测试List类型* @param productList* @return*/@RequestMapping(value = "list",produces="text/plain;charset=UTF-8")@ResponseBodypublic String list(ProductList productList){return "productList.size:"+productList.getProducts().size()+"\t第一组产品"+productList.getProducts().get(0).toString();}
使用ProductList中的属性products来传参 ,products是List类型,所以存在索引,用索引来传递多组值
可以发现,传入第一组产品的名字时候,直接报错了,为什么呢?根据错误提示,查询了一下,说是因为tomcat版本的问题,我用的tomcat版本是8.5.39,在url中输入特殊符号如中括号,是不被RFC7230和RFC3986定义的规范允许的,其实就是涉及到了urlEncode的问题,url编码问题,特殊字符对应的有特殊的编码,网络上的解决方案有更换tomcat版本,或者修改tomcat的配置文件,或者在后端处理一下urlencode问题。因为演示,最简单的方法就是直接用可以识别的字符替代,中括号的左边[用%5B,右边]用%5D替代,然后再次请求就可以了识别了
注意,在传参的时候,如果第一组即products[0]之后直接跳跃,传入products[20],中间会有很多对象是null
4.2关于Set的数据绑定
set的应用主要在去除重复的方面
例如Product对象中,如果各属性值都一样,则是重复对象.实际只会保存一个
在dto包下新建ProductSet类
package com.xiaomifeng1010.dto;import com.xiaomifeng1010.entity.Product;
import lombok.Data;import java.util.Set;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 19:28*/
@Data
public class ProductSet {private Set<Product> products;
}
controller中添加请求方法
/*** 测试Set类型* @param productSet* @return*/@RequestMapping(value = "set",produces="text/plain;charset=UTF-8")@ResponseBodypublic String set(ProductSet productSet){return "productSet.size:"+productSet.getProducts().size()+productSet.toString();}
还是按照原先的方式,给两组参数,第一组和第二组,但是却报错了500,错误提示翻译了一下,就是说set的size是0,但是却传入了两个元素(所以无法从大小为0的Set中获取索引为0的元素)
所以代码需要修改一下,给set中添加几个元素对象(使其初始化的时候大小不为0)
package com.xiaomifeng1010.dto;import com.xiaomifeng1010.entity.Product;
import lombok.Data;import java.util.HashSet;
import java.util.Set;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 19:28*/
@Data
public class ProductSet {private Set<Product> products;private ProductSet(){products = new HashSet<>();products.add(new Product());products.add(new Product());}
}
好了,再重新请求一下:
可以看到size是1,虽然hashset中添加了两个new Product(),但是两个new Product()对象相同(因为Product属性都是null)
所以如果再增加一组就又会报错500(真的是麻烦,springMVC对set的支持还不够友好,所以要接收多组数据,优先选用List)
4.3关于Map的数据绑定
在dto包下创建ProductMap类
package com.xiaomifeng1010.dto;import com.xiaomifeng1010.entity.Product;
import lombok.Data;import java.util.Map;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 20:07*/
@Data
public class ProductMap {private Map<String, Product> products;
}
在controller中加上请求方法
/*** 测试Map类型* @param productMap* @return*/@RequestMapping(value = "map",produces="text/plain;charset=UTF-8")@ResponseBodypublic String map(ProductMap productMap){return "productMap.size:"+productMap.getProducts().size()+"对象:"+productMap.toString();}
在url请求中,使用的还是productMap的属性products,但是products是Map类型,传参的时候,每一对元素的key值是字符串类型,放在中括号中,类似于list和set的索引用法
key为xiaomifeng1010的product的产品名为iPad,数量为2
5.测试第五种数据类型:传递的数据类型为json或者xml
5.1 json格式
以json格式作为请求体
传入一个Product对象
/*** 测试json类型* @param product* @return*/@RequestMapping(value = "json",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")@ResponseBodypublic String json(@RequestBody Product product){return product.toString();}
使用json格式的请求体,在请求方法中使用@RequestBody方法将json格式请求体传给product对象(json对象反序列化为product对象)
json数据:
{"name": "xiaomifeng1010","amount": 233,"address": {"province": "hubei","city": "xiangyang","district": "xiangzhou","town": "chenhe","village": "wangwang"}
}
接下来使用chrome浏览器插件(叫API Tester)模拟发送报文(也可以使用独立的软件postman),API Tester在浏览器中无法截图完整:但是200,返回正常
postman截图:
注意,一开始发送请求的时候一直报415错误,提示格式不支持,后来查询了很久,发现是少了一些依赖包
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.10.2</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.2</version>
</dependency>
把这两个依赖包也加上
最初项目中只加了一个json相关的jar包
<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version>
</dependency>
完整的依赖为:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xiaomifeng.cn</groupId><artifactId>springmvc-databind</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springmvc-databind Maven Webapp</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-servlet-api</artifactId><version>7.0.64</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.4</version></dependency><!--处理json的相关jar包依赖--><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.10.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency></dependencies><build><finalName>springmvc-databind</finalName></build>
</project>
算是踩了一个坑。
5.2 xml格式
controller中添加新的请求方法:
/*** 测试xml格式* @param address* @return*/@RequestMapping(value = "xml",method = RequestMethod.POST,produces = "application/xml;charset=UTF-8")@ResponseBodypublic String xml(@RequestBody Address address){return address.toString();}
为了方便测试,还用刚才的json数据,使用工具网站,将json格式转为xml格式,工具网址:http://www.bejson.com/xml2json/
使用工具很轻易转换成了xml格式:
<?xml version="1.0" encoding="UTF-8" ?><name>xiaomifeng1010</name><amount>233</amount><address><province>hubei</province><city>xiangyang</city><district>xiangzhou</district><town>chenhe</town><village>wangwang</village></address>
使用这个jar包处理xml
<dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>5.2.2.RELEASE</version>
</dependency>
同时Address类也需要修改一下
package com.xiaomifeng1010.entity;import lombok.Data;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 14:20*/
@XmlRootElement(name="address")
public class Address implements Serializable {private static final long serialVersionUID = -6389423477748597401L;/*** 省份*/private String province;/*** 市*/private String city;/*** 区*/private String district;/*** 乡镇*/private String town;/*** 村*/private String village;@XmlElement(name="province")public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}@XmlElement(name="city")public String getCity() {return city;}public void setCity(String city) {this.city = city;}@XmlElement(name="district")public String getDistrict() {return district;}public void setDistrict(String district) {this.district = district;}@XmlElement(name="town")public String getTown() {return town;}public void setTown(String town) {this.town = town;}@XmlElement(name="village")public String getVillage() {return village;}public void setVillage(String village) {this.village = village;}@Overridepublic String toString() {return "Address{" +"province='" + province + '\'' +", city='" + city + '\'' +", district='" + district + '\'' +", town='" + town + '\'' +", village='" + village + '\'' +'}';}
}
类上添加注解@XmlRootElement,同时属性的get方法上添加@XmlElement注解
然后在postman中发请求
<?xml version="1.0" encoding="UTF-8" ?>
<address>
<province>hubei</province>
<city>xiangyang</city>
<district>xiangzhou</district>
<town>chenhe</town>
<village>wangwang</village>
</address>
只要address那一部分的xml
请求头中content-type中设置application/xml
最后放上controller类中完整的请求方法代码:
package com.xiaomifeng1010.controller;import com.xiaomifeng1010.dto.ProductList;
import com.xiaomifeng1010.dto.ProductMap;
import com.xiaomifeng1010.dto.ProductSet;
import com.xiaomifeng1010.entity.Address;
import com.xiaomifeng1010.entity.Corporation;
import com.xiaomifeng1010.entity.Product;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @author xiaomifeng1010* @version 1.0* @date: 2020/3/27 14:41*/
@Controller
public class DataBindTestController {/*** 测试基本数据类型* @param price* @return*/@RequestMapping(value="baseType",produces="text/plain;charset=UTF-8")@ResponseBodypublic String baseType(double price) {return "价格是:"+price;}/*** 测试基本数据类型的包装类(引用类型)* @param price* @return*/@RequestMapping(value="baseTypeWrapper",produces="text/plain;charset=UTF-8")@ResponseBodypublic String baseTypeWrapper(Double price){return "价格:"+price;}/*** 测试数组类型* @param name* @return*/@RequestMapping(value = "arrayType")@ResponseBodypublic String arrayType(String[] name) {
// List<String> list=Stream.of(names).distinct().sorted((x, y) -> x.length()-y.length()).collect(Collectors.toList());StringBuilder sbf = new StringBuilder();for(String item : name){sbf.append(item).append(" ");}return sbf.toString();}/*** 测试自定义的类* Product类和Corporation类中都有nmae和amount属性*/@RequestMapping(value = "object")@ResponseBodypublic String object(Product product, Corporation corporation){return product.toString() +"/"+corporation.toString();}@InitBinder("product")public void initUser(WebDataBinder binder){binder.setFieldDefaultPrefix("product.");}@InitBinder("corporation")public void initAdmin(WebDataBinder binder){binder.setFieldDefaultPrefix("corporation.");}/*** 测试List类型* @param productList* @return*/@RequestMapping(value = "list",produces="text/plain;charset=UTF-8")@ResponseBodypublic String list(ProductList productList){
// return "productList.size:"+productList.getProducts().size()+"\t第一组产品"+productList.getProducts().get(0).toString();return "productList.size:"+productList.getProducts().size()+productList.toString();}/*** 测试Map类型* @param productMap* @return*/@RequestMapping(value = "map",produces="text/plain;charset=UTF-8")@ResponseBodypublic String map(ProductMap productMap){return "productMap.size:"+productMap.getProducts().size()+"对象:"+productMap.toString();}/*** 测试json类型* @param product* @return*/@RequestMapping(value = "json",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")@ResponseBodypublic String json(@RequestBody Product product){return product.toString();}/*** 测试xml格式* @param address* @return*/@RequestMapping(value = "xml",method = RequestMethod.POST,produces = "application/xml;charset=UTF-8")@ResponseBodypublic String xml(@RequestBody Address address){return address.toString();}/*** 测试xml格式* @param product* @return*/
// @RequestMapping(value = "xml",method = RequestMethod.POST,produces = "application/xml;charset=UTF-8")
// @ResponseBody
// public String xml(@RequestBody Product product){
// return product.toString();
//
// }}
springMVC前后端各种类型数据绑定相关推荐
- springMVC前后端数据交互
springMVC前后端数据及交互部分是最重要的,因为其余部分都被封装好了,我们要做的就是这个部分,我的框架才用SSM,进公司以来在项目组也用到了这些,但是不够全面,系统,脑子里面思路混乱,所以总结下 ...
- vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍
基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...
- SpringMVC前后端交互
文章目录 参数绑定 Controller层请求 springMVC参数绑定 参数绑定过程 具体步骤 SpringMVC支持的参数类型 默认参数类型 基本参数类型 自定义参数类型 返回值 Control ...
- 实现SpringMVC + Vue 前后端分离 支付宝API付款
项目场景: 需求:VUE + SpringMVC前后端分离项目使用支付宝API接口实现付款. 问题描述 提示为:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配 解决方案: 1.密钥真的不匹配 ...
- Java项目:前后端分离疫情防疫平台设计和实现(java+springmvc+VUE+node.js+mybatis+mysql+springboot+redis+jsp)
源码获取:博客首页 "资源" 里下载! 主要技术:Java.springmvc.VUE.node.js.mybatis.mysql.tomcat.jquery.layui.boot ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题...
现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出...
一.Maven多模块项目的创建 我们需要建立一个多模块的maven项目,其目录结构为 其中student-api用于暴露接口:student-service用语处理业务逻辑及调用数据访问对象,返回相应 ...
- springmvc集成cas,并解决前后端分离情况
2019独角兽企业重金招聘Python工程师标准>>> 1.最近项目需要集成已经存在的cas系统. 但是目前已集成的系统都是jsp.而我们项目是前后端分离开发(伪),没有分开部署. ...
- Mybatis+springMVC+分页查询+前后端代码
Mybatis+springMVC+分页查询+前后端代码 前言 我们在公司中经常会用到分页查询,最近,我在做一个公司的任务的时候,调用外部系统时需要将结果封装成分页的数据,之前我们都是直接调用我们公司 ...
最新文章
- ReentrantLock可重入锁的使用场景(转)
- Failed to start mongod.service: Unit mongod.service not found
- Java线程详解(7)-线程的调度
- java线程代码实现_Java 多线程代码实现讲解
- 「Innovation 2021」网易应用创新开发者大赛正式收官,十强选手精彩对决
- 主机字节序与网络字节序
- C#详解值类型和引用类型区别
- mysql sql优化及注意事项
- vb.net 教程 1-20 例
- 大学英语2 unit4 第五题
- 没有大厂经验的前端可以这么写简历
- Error while starting capture on link: Port 0 has already a filter applied 解决方法
- 《狂人日记》是中国第一部现代白话文小说
- 优雅的使用vue+Dcloud(Hbuild)开发混合app
- 【Java基础系列教程】第三章 Java变量与运算符
- JPG转换成PDF转换器使用说明
- REVIT建模步骤中:绘制形状不能拾取两条参照平面的交点解决方法
- HTML打造动漫人物,好莱坞顶级制作联袂打造!《和平精英》首部官方角色·吉莉 动画短片发布...
- 信息收集入门面试考题
- Axure 自定义元件库
热门文章
- 如何通过Chrome中的代码设置JavaScript断点?
- .gitignore和“以下未跟踪的工作树文件将被签出覆盖”
- 天梯—计算阶乘和(C语言)
- java重定向并保持同一个会话_当会话在Java Web应用程序中过期时,如何重定向到登录页面?...
- mysql按日期查询数据_mysql按日期查询数据
- O(1) O(n)
- Linux内存管理学习资料
- mysql 容灾 灾备 备份
- Linux操作系统命令解释
- java键盘控制英雄左右移动_js实现键盘操作实现div的移动或改变的原理及代码