java中@Controller和@RestController以及@GetMapping和@PostMapping接收参数的格式

发布时间:2021-09-06 18:00:15 作者:chen
来源:亿速云 阅读:227
# 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"; // 返回视图名称
    }
}

1.2 @RestController

@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


2. @GetMapping与@PostMapping的参数接收

2.1 @GetMapping参数接收

@GetMapping用于处理HTTP GET请求,参数通常通过URL传递。

2.1.1 路径变量(Path Variable)

@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
    return "User ID: " + id;
}

2.1.2 请求参数(Query Parameter)

@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
    return "User Name: " + name;
}

2.1.3 对象绑定(自动映射)

@GetMapping("/user/details")
public String getUserDetails(User user) {
    return "User: " + user.getName() + ", Age: " + user.getAge();
}

User类需包含nameage字段,Spring会自动绑定URL参数。

2.2 @PostMapping参数接收

@PostMapping用于处理HTTP POST请求,参数通常通过请求体传递。

2.2.1 表单数据(Form Data)

@PostMapping("/user/form")
public String createUser(@RequestParam String name, @RequestParam int age) {
    return "Created User: " + name;
}

2.2.2 JSON请求体(RequestBody)

@PostMapping("/user/json")
public String createUserJson(@RequestBody User user) {
    return "Created User: " + user.getName();
}

2.2.3 混合参数(Path + Body)

@PostMapping("/user/{role}")
public String createUserWithRole(@PathVariable String role, @RequestBody User user) {
    return "Created " + role + " User: " + user.getName();
}

3. 参数接收的常见格式

3.1 基本类型与包装类

3.2 日期类型处理

@GetMapping("/date")
public String parseDate(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
    return "Date: " + date;
}

3.3 集合/数组参数

@GetMapping("/list")
public String handleList(@RequestParam List<String> ids) {
    return "IDs: " + ids;
}

URL示例:/list?ids=1&ids=2

3.4 文件上传(Multipart)

@PostMapping("/upload")
public String uploadFile(@RequestParam MultipartFile file) {
    return "File uploaded: " + file.getOriginalFilename();
}

4. 常见问题与解决方案

4.1 参数缺失处理

@GetMapping("/optional")
public String optionalParam(@RequestParam(required = false) String name) {
    return "Name: " + (name != null ? name : "default");
}

4.2 参数名映射

@GetMapping("/custom")
public String customParam(@RequestParam("user-name") String username) {
    return "Username: " + username;
}

4.3 全局参数验证

@PostMapping("/validate")
public String validateUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        return "Validation failed!";
    }
    return "User valid!";
}

5. 总结

注解/场景 参数传递方式 适用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格式,可直接用于技术文档或博客发布。

推荐阅读:
  1. Spring MVC @RestController接收POST请求,用Map接收
  2. @Controller、@RestController注解区别详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:PHP代码判断设备是手机还是平板电脑的两种方法

下一篇:YII2框架中如何通过Composer安装扩展插件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》