欢迎光临
我们一直在努力

前端对应后端注解完整传参示例

前端对应后端注解完整传参示例

后端统一实体类参考

java

运行

@Data
public class User {
private Long id;
private String username;
private Integer age;
}

一、@PathVariable 路径变量

后端接口

java

运行

@GetMapping("/user/{id}")
public R<User> get(@PathVariable Long id) {
}

1. Axios / Fetch

js

运行

// axios
axios.get('/user/1001')

// fetch
fetch('/user/1001')

2. 原生表单 / 链接

html

预览

<a href="/user/1001">查看用户</a>

地址格式:/user/{变量},参数拼在 URL 路径里,不能放问号后

二、@RequestParam Query 参数(?key=value)

后端接口

java

运行

@GetMapping("/user/list")
public R list(
@RequestParam String username,
@RequestParam(defaultValue = "1") Integer page
) {
}

请求地址:/user/list?username=张三&page=2

1. Axios GET

js

运行

axios.get('/user/list', {
params: {
username: '张三',
page: 2
}
})

2. 原生 Form GET

html

预览

<form action="/user/list" method="get">
<input name="username">
<input name="page">
<button type="submit">查询</button>
</form>

3. 拼接 URL

js

运行

axios.get(`/user/list?username=${name}&page=${page}`)

三、表单提交 x-www-form-urlencoded(@ModelAttribute / 无注解实体)

后端

java

运行

@PostMapping("/user/form")
public R form(User user) {
}
// 等价
// public R form(@ModelAttribute User user) {}

1. 原生 form 表单(默认编码)

html

预览

<form action="/user/form" method="post">
<input name="username">
<input name="age">
<button>提交</button>
</form>

2. Axios post 表单格式

js

运行

// 方式1:URLSearchParams
let params = new URLSearchParams()
params.append('username', '张三')
params.append('age', 18)
axios.post('/user/form', params)

// 方式2:qs序列化
import qs from 'qs'
axios.post('/user/form', qs.stringify({username:'张三',age:18}))

请求头自动:Content-Type: application/x-www-form-urlencoded

四、@RequestBody JSON 传参(前后端分离最常用)

后端

java

运行

@PostMapping("/user/save")
public R save(@RequestBody User user) {
}

必须设置请求头 Content-Type: application/json

Axios 示例

js

运行

axios.post('/user/save', {
username: "李四",
age: 22
})

Fetch 原生

js

运行

fetch('/user/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: "李四",
age: 22
})
})

注意:GET 请求不能使用 @RequestBody,无请求体

五、@RequestHeader 请求头传参

后端

java

运行

@GetMapping("/user/info")
public R info(@RequestHeader("token") String token) {
}

Axios

js

运行

axios.get('/user/info', {
headers: {
token: 'abc123xyz'
}
})

六、@CookieValue Cookie 取值

前端无需额外操作,浏览器自动携带 Cookie,后端直接读取

java

运行

@GetMapping("/session")
public R session(@CookieValue("SESSIONID") String sessionId) {
}

七、@RequestPart 文件上传 multipart/form-data

后端

java

运行

@PostMapping("/upload")
public R upload(
@RequestPart MultipartFile file,
@RequestPart User user
) {
}

Axios 上传

js

运行

let formData = new FormData()
// 文件
formData.append('file', file)
// JSON参数转字符串
formData.append('user', JSON.stringify({username:'张三',age:18}))

axios.post('/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})

快速区分避坑总结

  • 问号后面参数 → @RequestParam
  • URL 路径占位 {id} → @PathVariable
  • json body → @RequestBody
  • form 表单键值对 → 实体 /@ModelAttribute
  • header/token → @RequestHeader
  • 文件上传 → @RequestPart + FormData
  • GET 请求禁止使用 @RequestBody
  • 赞(0)
    未经允许不得转载:171主机测评 » 前端对应后端注解完整传参示例
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址