@ModelAttribute接收不到前端传过来的数据
时间: 2024-02-03 07:33:09 浏览: 52
@ModelAttribute 注解用于接收前端传递过来的表单数据,但需要注意以下几点:
1. 确定前端是否正确传递了数据,可以使用控制台查看请求的数据或者在后端打印日志来确认。
2. 确定前端传递的参数名称是否与后端接收的参数名称一致。
3. 确定前端传递的参数类型是否与后端接收的参数类型一致,如果不一致需要进行相应的类型转换。
4. 确定前端传递的参数是否符合后端的校验规则,例如@NotNull等注解。
如果以上几点都没有问题,但仍然无法接收到前端传递的数据,可以尝试使用@RequestParam注解或者直接从HttpServletRequest中获取参数来接收数据。
相关问题
单元测试时@ModelAttribute拿不到传过来的数据
在单元测试中,@ModelAttribute 注解无法直接接收前端传递过来的数据,因为单元测试是在后端直接调用接口方法,不经过网络传输,所以无法模拟前端传递的数据。
但是可以通过以下方式来模拟前端传递的数据:
1. 使用 MockMvc 进行模拟请求,例如:
```
mockMvc.perform(post("/api/user")
.param("name", "test")
.param("age", "18"))
.andExpect(status().isOk());
```
2. 在测试方法中手动创建一个包含参数的 MockHttpServletRequest 对象,并将其传递给控制器方法,例如:
```
@Test
public void testUserController() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setParameter("name", "test");
request.setParameter("age", "18");
User user = userController.saveUser(request);
Assert.assertEquals(user.getName(), "test");
Assert.assertEquals(user.getAge(), 18);
}
```
无论使用哪种方式,都需要注意前端传递的参数名称和类型是否与后端接收的参数一致,并且需要对参数进行相应的校验和类型转换。
ajax 前端到后台传List<CxffExamRecordChild> 后端接收不到,前端应该怎么写
前端传 List 类型数据到后端的实现方式有多种,下面提供两种常用的方法:
方法一:使用 JSON.stringify() 将 List 类型数据转换为 JSON 格式字符串,再通过 AJAX 发送到后端。
例如:
```javascript
var dataList = [{id:1, name:"张三"}, {id:2, name:"李四"}]; // List 类型数据
var jsonData = JSON.stringify(dataList); // 转换为 JSON 格式字符串
$.ajax({
url: "/api/saveData",
type: "POST",
contentType: "application/json",
data: jsonData,
success: function (result) {
console.log(result);
},
error: function (xhr, status, error) {
console.log(error);
}
});
```
后端接收数据的代码:
```java
@PostMapping("/api/saveData")
public void saveData(@RequestBody List<CxffExamRecordChild> dataList) {
// 处理接收到的数据
}
```
方法二:使用 FormData 对象将 List 类型数据封装成表单数据,再通过 AJAX 发送到后端。
例如:
```javascript
var dataList = [{id:1, name:"张三"}, {id:2, name:"李四"}]; // List 类型数据
var formData = new FormData();
for (var i = 0; i < dataList.length; i++) {
formData.append("dataList[" + i + "].id", dataList[i].id);
formData.append("dataList[" + i + "].name", dataList[i].name);
}
$.ajax({
url: "/api/saveData",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function (result) {
console.log(result);
},
error: function (xhr, status, error) {
console.log(error);
}
});
```
后端接收数据的代码:
```java
@PostMapping("/api/saveData")
public void saveData(@ModelAttribute("dataList") List<CxffExamRecordChild> dataList) {
// 处理接收到的数据
}
```
以上两种方法都可以实现将 List 类型数据传递到后端,具体选择哪种方式,需要根据实际情况进行选择。
阅读全文