1. 主页 > 好文章

Spring MVC控制器方法编写实战指南:参数接收与响应处理详解

你是不是刚学Spring MVC,面对Controller方法一头雾水?别慌,今天咱们就来唠唠这个事儿。记住啊,Controller就像餐馆里的服务员,专门负责接单传菜,把用户请求转给厨房(Service层),再把做好的菜端回去。那这个服务员到底要咋培训呢?咱们分三步走:接单技巧(参数接收)、上菜规范(响应处理)、常见翻车现场(避坑指南)。


??一、接单的十八般武艺——参数接收??

新手最爱问的问题:浏览器发来的请求参数到底怎么接?这里可不止@RequestParam一种姿势,咱们搞个对比表格看得更明白:

接单方式适用场景使用姿势举个栗子
@RequestParamURL?后面的参数方法参数前标注/user?id=123
@PathVariableURL路径中的参数方法参数前标注/user/{id}
@RequestBodyPOST请求的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)
@ResponseBodyRESTful接口自动转JSON/XML@PostMapping → return user对象

??重点来了:状态码不是随便写的!??
200 OK表示成功,400 Bad Request是参数错误,404 Not Found找不到资源。千万别学某些教程里永远返回200,那跟掩耳盗铃有什么区别?


??三、避不开的翻车现场??

  1. ??参数死活接不到怎么办???
    先检查注解用对没,再看参数名是否匹配。用Postman发个请求,看看控制台有没有警告日志,八成是参数名写错了。

  2. ??日期格式总报错咋整???
    在实体类字段上加@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"));
            }
        };
    }
  3. ??文件上传总失败???
    记住三步走:

    • 表单enctype="multipart/form-data"
    • 配置文件中加spring.servlet.multipart.enabled=true
    • Controller用MultipartFile接参数

??个人观点时间??
干了这么多年Java开发,发现Controller写得好的项目,维护成本能降一半。这里说几个血泪教训:

  1. ??别在Controller里写业务逻辑??,这就是服务员跑去炒菜,迟早厨房要炸
  2. ??参数校验宁可多不要少??,见过太多SQL注入就是因为没做好参数过滤
  3. ??异常处理要统一??,搞个@ControllerAdvice把全局异常都管起来,代码能清爽十倍

最后送大家一句口诀:参数接得准,响应回得稳,Controller不背锅,项目才能跑得稳。下次遇到问题别急着百度,先翻翻自己写的Controller,说不定答案就在里面呢!

本文由嘻道妙招独家原创,未经允许,严禁转载