1 springmvc接收数组类型参数为null
前端JS代码:
//获取选中标签
var checkboxs= $('#added_labels input:checkbox');
//储存选中id
var ids= [];
$.each(checkboxs,function (i,obj) {
ids.push(obj.value);
})
//发起ajax请求
$.ajax({
url:'/test',
type:'post',
data:{'ids':ids},
success: function (res) {
console.log(res);
}
});
后台JAVA代码:
@RequestMapping(value = "/test",method = RequestMethod.POST)
@ResponseBody
public BaseResult Test(@RequestParam(value="",required=true) String[] ids){
........... ..........
}
其中参数 ids 后台无法接收到,显示为 null
解决方法:
- ajax发送请求时,添加
traditional
属性,并设置为true 即:traditional: true
, (traditional 默认为 false 当为true阻止深度序列化,用于传递数组类型参数)。
$.ajax({
url:'/test',
type:'post',
traditional: true,
data:{'ids':ids},
success: function (res) {
console.log(res);
}
});
- ajax不直接发送数组,而是发送String,使用toString方法转为json格式的String字符串
$.ajax({
url:'/test',
type:'post',
traditional: true,
data:{'ids':ids.toString()},
success: function (res) {
console.log(res);
}
});
- 后台更改接收方式为List:
public BaseResult Test(@RequestParam(value="",required=true) List<String> ids){
........... ..........
}
2 解决 Maven 无法自动下载依赖的问题
问题分析
无法下载依赖的情况大致有两类:
- 无法通过 Maven 中央仓库提供的坐标下载(也许是网络环境导致)
- 类库没有上传至中央仓库只能通过官网或其它渠道下载
解决思路:
- 手动管理依赖,将依赖按传统的方式放入 libs 目录中。缺点是需要手动管理依赖版本。
- 将依赖安装到本地仓库中,按照 Maven 下载依赖的优先级,会优先查找本地仓库中的依赖。缺点是协同开发时,其他开发人员会因为本地缺少依赖导致项目启动报错。
解决方案
以上解决思路虽然都可以解决缺少依赖的问题,但操作起来不太优雅,此时我们可以使用 Maven 提供的插件来解决这个问题
pom.xml 增加插件配置,关键配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>install-external-kaptcha</id>
<!-- 触发时机:执行 mvn clean 命令时自动触发插件 -->
<phase>clean</phase>
<configuration>
<!-- 存放依赖文件的位置 -->
<file>${project.basedir}/libs/kaptcha-2.3.jar</file>
<repositoryLayout>default</repositoryLayout>
<!-- 自定义 groupId -->
<groupId>com.google.code.kaptcha</groupId>
<!-- 自定义 artifactId -->
<artifactId>kaptcha</artifactId>
<!-- 自定义版本号 -->
<version>2.3</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
<!-- 是否自动生成 POM -->
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
通过该插件,我们可以在执行 mvn clean 命令时将项目所需要的依赖自动安装进本地仓库