对于不知道详细信息的依赖可以到https://mvnrepository.com/网站查询。使用关键词搜索,然后在搜索结果列表中选择适合的使用。
1.关于多个模块之间依赖的问题各个模块建立好之后,需要引入模块之间的依赖,难免会出现先报错:某某某jar包缺失,依赖信息不可用
比如:先对component模块进行打包,出现如下的报错:
The POM for common-util:jar:1.0-SNAPSHOT is missing, no dependency information available The POM for admin-entity:jar:1.0-SNAPSHOT is missing, no dependency information available
明显是引入依赖时,本地仓库中找不到对应的jar包,所以要先将依赖的jar包install,安装到本地仓库;每次这些模块中的内容发生修改时,要重新进行install;建议打包jar包时从最底层的依赖开始install,依次向上,这样确保需要的jar包都会存在于maven仓库中,不会出现某某某jar包丢失的情况。
2.关于MyBatis逆向工程的问题最开始逆向工程生成Mapper接口中的方法较少,没有根据主键查询的一些方法,但数据库中制表时已经设置好了相关的主键。
问题出在了Mysql驱动的版本上了,貌似超过6.0的版本(我开始用的8.x.x版本的)就不会生成根据主键查询方法,将驱动修改为6.0以下的版本即可:
mysql mysql-connector-java 5.1.38
还需要注意的一个问题,不同数据库连接中的driverClass:
driverClass="com.mysql.jdbc.Driver" // mysql-connector-java的version < 6 driverClass="com.mysql.cj.jdbc.Driver" // mysql-connector-java的version > 63.关于SpringMVC环境下的Ajax请求的问题
解决方法见3.2和3.3
SpringMVC主要利用类型转换器(MessageConverter)将前台信息转换成开发者需要的格式。然后在相应的Controller方法接收参数前添加@RequestBody注解,进行数据转换,或在方法的返回值类型处添加@ResponseBody注解,将返回信息转换成相关格式的数据
首先前端ajax中:
①如果传入的是json字符串,要设置content-type为application/json; charset=utf-8,后端用@RequestBody注解解析后进行接收
②如果直接传入json对象,content-type不用设置,默认为application/x-www-form-urlencoded,后端也不需要用注解进行解析接收
3.1 刚开始就是 JSON.stringify() 的用法不熟,然后一直死磕contentType ,百度了好久巨坑
开始时,为了测试后端能否接受到json数据,前端输入了一个数组,用了个JSON的一个转字符串的函数,后端一直接收不到报415错误(请求的配置都正确),最后只能用String来接收(后面证实这一想法是错误的,虽然他的确是个字符串)
测试代码如下:
前端:
$("#btn2").click(function () {
// 准备要发送的数据
var arrary = [5, 8, 12];
// 必须将目标先转换成JSON字符串
var arrayStr = JSON.stringify(arrary);
$.ajax({
url: "${pageContext.request.contextPath}/test/two.html",
data: arrayStr,
type: "post",
dataType: "json",
contentType:"application/json; charset=utf-8",
// 告诉服务器当前请求的请求体是JSON格式
success: function (response) {
alert(response);
},
error: function (response) {
alert(response);
}
});
});
后端:
@ResponseBody
@RequestMapping(value = "/test/two.html", method = RequestMethod.POST)
public String testAjax02(@RequestBody String integers){
// 之前一直用Integer[] 来接收,一直报415
// 前端JSON.stringify(arrary) --> 要用String来接收
System.out.println(integers);
return integers;
}
3.2 紧接着当前端发送一些复杂对象时,后端的@RequestBody注解仍然无法用对应的自定义类接收参数,找了好久都发现不到那里错了,最后问题锁定在@RequestBody注解上(此时并未配置mvc:annotation-driven/自动注解标签,其实配了,但命名空间写错了,结果等于没开!)
这里参考了博客
用的是jackson在SpringMVC框架下进行JSON字符串的传输,给pom中配了fastjson依赖显然没用(注:fastjson也是一种配置方式,与jackson类似 )
通过jackson包中的一些注解可以在请求、响应过程中把java对象和json对象(可能叫JSON字符串更准确一些)进行互转,要使用此种方式需要引入以下三个jar包配置在pom中:
jackson-annotations jackson-core jackson-databind
最重要的还是要在mvc配置文件中对相应的注解进行配置,为处理器适配器(HandlerAdapter)配置类型转换器列表MessageConverter,并在其中添加需要的类型转换器。这样当请求到达处理器适配器层时,配置的@RequestBody注解与@ResponseBody注解就会利用具体的类型转换器MessageConverter将请求信息转换为指定的格式。
application/json;charset=UTF-8
配置好之后,这样@RequestBody注解就可以解析请求中发来的JSON字符串,并用对应的类来接收;而@ResponseBody注解也能够把java类转换成JSON字符串,发给客户端进行后续操作。
3.3 后面再仔细查找了博客,发现通过配置mvc:annotation-driven/自动注解标签可以进行多种类型数据格式转换,因为自动注解配置默认加载了7种类型转换器
而如果不使用自动注解配置,只是单独配置了JSON转换器,配置@RequestBody的参数只能接收并解析JSON格式的数据,如3.2所述,如果想解析或组装其他类型的数据,则需要添加新的类型转换器
要注意的是:如果配置了mvc:annotation-driven/自动注解标签(命名空间http一定要写对,IDEA自动补全时有多个,一定要写对,不然配置无效,当时就是没写对,才有了3.1和3.2的乌龙!),则表明使用SpringMVC提供的注解型配置,那么这种情况就不需要配置类型转换器了,因为SpringMVC已经默认初始化了7种转换器



