SpringMVC中前台ajax传递数据,后台controller接收为null问题解决
时间: 2024-02-24 18:54:38 浏览: 24
前台ajax传递数据时,需要确保传递的数据的参数名与后台controller中的参数名一致。如果参数名不一致,则后台controller接收到的参数值为null。
另外,还需要确认前台ajax请求的Content-Type为application/json,后台controller需要使用@RequestBody注解将json格式的数据转换为对象,才能正确接收数据。
代码示例:
前台ajax请求代码:
```
$.ajax({
type: "POST",
url: "/test",
contentType: "application/json",
data: JSON.stringify({name: "张三", age: 20}),
success: function(data) {
console.log(data);
}
});
```
后台controller代码:
```
@PostMapping("/test")
@ResponseBody
public String test(@RequestBody User user) {
System.out.println(user.getName() + ", " + user.getAge());
return "success";
}
```
其中,User为后台定义的实体类,包含name和age属性。
相关问题
SpringMVC+js写一个判断账号唯一代码
下面是一个基于 SpringMVC 和 JavaScript 的判断账号唯一的示例代码:
1. 后端代码(Java + SpringMVC)
```java
@Controller
public class UserController {
@Autowired
private UserService userService;
/**
* 判断账号是否唯一
*/
@RequestMapping("/checkAccount")
@ResponseBody
public boolean checkAccount(String account) {
return userService.getUserByAccount(account) == null;
}
}
```
在上面的代码中,使用了 SpringMVC 的 @Controller 注解将 UserController 类声明为一个控制器。checkAccount 方法用于判断账号是否唯一,其中调用了 UserService 的 getUserByAccount 方法查询数据库中是否存在相同的账号。
2. 前端代码(JavaScript + jQuery)
```javascript
$(function() {
// 监听账号输入框的值改变事件
$("#account").on("input", function() {
var account = $(this).val();
if (account) {
// 发送 AJAX 请求,判断账号是否唯一
$.ajax({
url: "/checkAccount",
type: "POST",
data: {
account: account
},
success: function(result) {
if (result) {
$("#accountTip").text("账号可用");
} else {
$("#accountTip").text("账号已存在");
}
}
});
} else {
$("#accountTip").text("");
}
});
});
```
在上面的代码中,使用了 jQuery 的事件监听机制和 AJAX 请求功能。当账号输入框的值发生改变时,发送一个 POST 请求到 /checkAccount 接口,将账号作为参数传递给后端。后端返回的结果为 true 表示账号可用,为 false 表示账号已存在,前端代码根据返回结果更新提示信息。需要注意的是,需要在 HTML 页面中正确设置账号输入框和提示信息的 id 属性。
function postData(data) { $.ajax({ type: "post", data: data, dataType: "json", url: "token/noteRest", async: true, success: function(data) { if(data.status == 0) { window.location.href = "${path}/H5/collaboration/index.html?token=" + data.token ; } else { alert(data.message); } }, error: function(data) { alert(data); } }); }其中url可以跳转到后台,Java格式怎么接收前台的data
在Java中接收前台的数据,可以使用Servlet或者SpringMVC框架中的控制器(Controller)来处理。以下是使用Servlet的示例代码:
```java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应数据类型为JSON
response.setContentType("application/json");
// 获取前台传递过来的数据
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String data = sb.toString();
// 处理数据
// TODO: 在这里编写自己的业务逻辑
// 返回响应数据
Map<String, Object> result = new HashMap<>();
result.put("status", 0);
result.put("message", "success");
String json = new ObjectMapper().writeValueAsString(result);
response.getWriter().write(json);
}
```
在上面的代码中,我们首先设置了响应数据类型为JSON,然后通过`request.getReader()`方法获取前台传递过来的数据。接着在处理数据的部分,你可以根据自己的业务逻辑进行编写。最后,在返回响应数据的部分,我们将处理结果封装成一个Map对象,然后使用Jackson库将Map对象转换成JSON字符串,并通过`response.getWriter().write(json)`方法返回给前台。