Spring MVC控制器方法编写实战指南:参数接收与响应处理详解
你是不是刚学Spring MVC,面对Controller方法一头雾水?别慌,今天咱们就来唠唠这个事儿。记住啊,Controller就像餐馆里的服务员,专门负责接单传菜,把用户请求转给厨房(Service层),再把做好的菜端回去。那这个服务员到底要咋培训呢?咱们分三步走:接单技巧(参数接收)、上菜规范(响应处理)、常见翻车现场(避坑指南)。
??一、接单的十八般武艺——参数接收??
新手最爱问的问题:浏览器发来的请求参数到底怎么接?这里可不止@RequestParam一种姿势,咱们搞个对比表格看得更明白:
接单方式 | 适用场景 | 使用姿势 | 举个栗子 |
---|---|---|---|
@RequestParam | URL?后面的参数 | 方法参数前标注 | /user?id=123 |
@PathVariable | URL路径中的参数 | 方法参数前标注 | /user/{id} |
@RequestBody | POST请求的JSON/XML数据 | 方法参数前标注 | {"name":"老王"} |
直接绑定对象 | 多个参数自动封装 | 直接声明对象类型 | User对象含name、age属性 |
这里有个坑得提醒:当参数名和变量名不一致时,记得用@RequestParam("前端参数名")来指定。比如前端传user_id,咱们后端用@RequestParam("user_id") Long userId来接,妥妥的。
??灵魂拷问:参数校验怎么做才不会翻车???
这时候就得祭出@Valid注解+BindingResult这对黄金搭档了。就像这样:
java复制public String createUser(@Valid User user, BindingResult result) { if(result.hasErrors()) { // 这里处理校验失败的情况 } }
记住校验顺序:先校验→再处理业务逻辑,这个顺序千万不能乱!
??二、上菜的讲究——响应处理??
这里新手最容易犯的错就是乱用返回类型。咱们再上个对比表镇楼:
返回方式 | 使用场景 | 优势 | 典型代码 |
---|---|---|---|
ModelAndView | 传统JSP页面渲染 | 数据视图一把抓 | return new ModelAndView("home",model) |
ResponseEntity | 需要控制HTTP状态码 | 精准控制响应头 | return new ResponseEntity<>(data,HttpStatus.OK) |
@ResponseBody | RESTful接口 | 自动转JSON/XML | @PostMapping → return user对象 |
??重点来了:状态码不是随便写的!??
200 OK表示成功,400 Bad Request是参数错误,404 Not Found找不到资源。千万别学某些教程里永远返回200,那跟掩耳盗铃有什么区别?
??三、避不开的翻车现场??
-
??参数死活接不到怎么办???
先检查注解用对没,再看参数名是否匹配。用Postman发个请求,看看控制台有没有警告日志,八成是参数名写错了。 -
??日期格式总报错咋整???
在实体类字段上加@DateTimeFormat(pattern="yyyy-MM-dd"),或者在配置类里搞全局格式化:java复制
@Bean public WebMvcConfigurer dateConfigurer() { return new WebMvcConfigurer() { @Override public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new DateFormatter("yyyy-MM-dd")); } }; }
-
??文件上传总失败???
记住三步走:- 表单enctype="multipart/form-data"
- 配置文件中加spring.servlet.multipart.enabled=true
- Controller用MultipartFile接参数
??个人观点时间??
干了这么多年Java开发,发现Controller写得好的项目,维护成本能降一半。这里说几个血泪教训:
- ??别在Controller里写业务逻辑??,这就是服务员跑去炒菜,迟早厨房要炸
- ??参数校验宁可多不要少??,见过太多SQL注入就是因为没做好参数过滤
- ??异常处理要统一??,搞个@ControllerAdvice把全局异常都管起来,代码能清爽十倍
最后送大家一句口诀:参数接得准,响应回得稳,Controller不背锅,项目才能跑得稳。下次遇到问题别急着百度,先翻翻自己写的Controller,说不定答案就在里面呢!
本文由嘻道妙招独家原创,未经允许,严禁转载