您好,登录后才能下订单哦!
# Java中@Controller和@RestController以及@GetMapping和@PostMapping接收参数的格式
## 引言
在Spring框架中,`@Controller`和`@RestController`是构建Web应用程序的核心注解,而`@GetMapping`和`@PostMapping`则用于处理HTTP请求。理解这些注解如何接收和传递参数对于开发高效的RESTful API至关重要。本文将详细探讨这些注解的参数接收格式和最佳实践。
---
## 1. @Controller与@RestController的区别
### 1.1 @Controller
`@Controller`是传统的Spring MVC控制器注解,通常用于返回视图名称(如JSP、Thymeleaf等)。它需要配合视图解析器工作。
```java
@Controller
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/view")
public String showView(Model model) {
model.addAttribute("message", "Hello, World!");
return "viewPage"; // 返回视图名称
}
}
@RestController
是@Controller
和@ResponseBody
的组合,直接返回数据(JSON/XML),适用于RESTful API开发。
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/greet")
public String greet() {
return "Hello, REST!"; // 直接返回字符串(JSON格式)
}
}
关键区别:
- @Controller
需要视图解析器,@RestController
直接序列化返回值。
- @RestController
默认所有方法都带有@ResponseBody
。
@GetMapping
用于处理HTTP GET请求,参数通常通过URL传递。
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
return "User ID: " + id;
}
@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
return "User Name: " + name;
}
@GetMapping("/user/details")
public String getUserDetails(User user) {
return "User: " + user.getName() + ", Age: " + user.getAge();
}
User
类需包含name
和age
字段,Spring会自动绑定URL参数。
@PostMapping
用于处理HTTP POST请求,参数通常通过请求体传递。
@PostMapping("/user/form")
public String createUser(@RequestParam String name, @RequestParam int age) {
return "Created User: " + name;
}
@PostMapping("/user/json")
public String createUserJson(@RequestBody User user) {
return "Created User: " + user.getName();
}
@PostMapping("/user/{role}")
public String createUserWithRole(@PathVariable String role, @RequestBody User user) {
return "Created " + role + " User: " + user.getName();
}
@RequestParam
支持String
、int
、Integer
等基本类型和包装类。int
会报错,Integer
则为null
。@GetMapping("/date")
public String parseDate(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
return "Date: " + date;
}
@GetMapping("/list")
public String handleList(@RequestParam List<String> ids) {
return "IDs: " + ids;
}
URL示例:
/list?ids=1&ids=2
@PostMapping("/upload")
public String uploadFile(@RequestParam MultipartFile file) {
return "File uploaded: " + file.getOriginalFilename();
}
@GetMapping("/optional")
public String optionalParam(@RequestParam(required = false) String name) {
return "Name: " + (name != null ? name : "default");
}
@GetMapping("/custom")
public String customParam(@RequestParam("user-name") String username) {
return "Username: " + username;
}
@PostMapping("/validate")
public String validateUser(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return "Validation failed!";
}
return "User valid!";
}
注解/场景 | 参数传递方式 | 适用HTTP方法 |
---|---|---|
@PathVariable |
URL路径变量 | GET/POST等 |
@RequestParam |
URL查询参数或表单数据 | GET/POST |
@RequestBody |
JSON/XML请求体 | POST/PUT |
对象自动绑定 | 查询参数或表单字段匹配 | GET/POST |
通过合理选择注解和参数接收方式,可以高效地构建灵活、易维护的Spring Web应用程序。
扩展阅读: - Spring官方文档 - Web MVC - RESTful API设计指南 “`
这篇文章总计约1500字,涵盖了参数接收的核心场景和代码示例,采用Markdown格式,可直接用于技术文档或博客发布。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。