**常用注解**
@RequestParam
此时有两种办法解决:1、将控制器的形参名称取得跟表单控件的name属性名称一样;2、选择使用@RequestParam来解决。
案例:
需求:使用@RequestParam解决表单控件的username属性值与控制器中的形参user名称不符。
<input type="text" name="username">
@RequestMapping("register")
public void register(@RequestParam("username") String user){
System.out.println(user);
}
@RequestBody
当项目中使用Ajax时,如果前端采用post方式向后台提交json字符串,此时后台无法直接获取请求体中json数据。直接接收时,一般会响应400(错误的请求),此时可以使用@RequestBody来解决。需要注意的是,该注解用于post请求,get请求不适用(get请求的数据都拼接到URL中了)。
需求:获取请求体中的内容。
方式一:序列化表单
步骤1:创建ajax.html
<form id="form" method="post">
<table>
<tr>
<td>用户名</td>
<td><input id="username" type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input id="password" type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"><input type="button" value="登录" id="btn"></td>
</tr>
</table>
</form>
<script src="../js/jquery-3.3.1.js" type="text/javascript"></script>
<script>
$(function () {
$("#btn").click(function () {
//序列化表单
var params=$("#form").serialize()
alert(params)
$.ajax({
url:"ajax",
type:"post",
data:params,
dataType:"text",
success:function (data) {
alert(data)
}
})
})
})
</script>
步骤2:修改TestController.java
@RequestMapping("ajax")
@ResponseBody
public String ajax(User user){
System.out.println(user);
return "success";
}
方式二:传递json字符串
步骤1:导入jackson-core、jackson-databind、jackson-annotations依赖
步骤2:contentType:“application/json;charset=UTF-8”,提交方式必须是post
<script src="../js/jquery-3.3.1.js" type="text/javascript"></script>
<script>
$(function () {
$("#btn").click(function () {
//获取json对象,此处可使用插件来获取
var params={
username:$("#username").val(),
password:$("#password").val(),
}
alert(params)
$.ajax({
url:"ajax",
type:"post",
//以json字符串传递,需要在请求头的contentType设置为json方式提交
contentType:"application/json;charset=UTF-8",
//将json对象转换为真正的json字符串
data:JSON.stringify(params),
dataType:"text",
success:function (data) {
alert(data)
}
})
})
})
</script>
步骤3:@RequestBody
//使用@RequestBody注解接json字符串参数
@RequestMapping("ajax")
@ResponseBody
public String ajax(@RequestBody User user){
System.out.println(user);
return "success";
}
@PathVariable
项目开发过程中使用了restful风格时,可以使用@PathVariable注解获取restful风格传递的参数值。
步骤1:创建restful.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>测试ajax</title>
</head>
<body>
<a th:href="@{/rest/tom/111}">测试restful传参</a>
</body>
</html>
步骤2:修改TestController.java
@Controller
public class TestController {
@RequestMapping("/")
public String index(){
return "restful";
}
......
@GetMapping("rest/{username}/{password}")
public String rest(@PathVariable String username,@PathVariable String password){
System.out.println(username+":"+password);
return "index";
}
}

856

被折叠的 条评论
为什么被折叠?



