十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SpringBoot-1-1-MVC

SpringBoot-1-1-MVC 在SpringBoot中MVC Controller相关注解的使用。引言本文面向 Spring Boot 初学者系统介绍 MVC Controller 层常用注解的使用方式。通过简洁的代码示例与效果截图帮助你快速理解每个注解的作用和参数含义。阅读本文前你需要具备基础的 Spring Boot 项目搭建能力。环境SpringBoot 4.1.0 jdk 21创建一个最简单的SpringBoot项目引入依赖POMdependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency使用Thymeleaf模板引擎显示页面。1.创建controller包创建login放于resource/templates中名叫login.htmla.GetMapping编写controller类如下Controller public class LoginController { GetMapping(login) public String t1() { return login; } }其中Controller:将该类标记为Spring MVC 控制器Spring会自动扫描并注册到上下文中。该注解主要用于返回视图页面的场景如果方法的返回值是String会被视图解析器解析为实际视图路径然后默认寻找Templates/XXX.html(当使用Thymeleaf时)。GetMappinglogin:表示限定请求方式为GET路径匹配login方法返回字符串login因为没有ResponseBodySpring会将login视为视图名称交给视图解析器渲染在SpringBoot和Thymeleaf组合下会找到对应的html并渲染返回启动后访问本机IP127.0.0.1:端口/路径就能看到效果了。效果如下端口我的是9090默认8080[可以修改]b.RequestMappingRequestMapping(value login1,method RequestMethod.GET) public String t2(){ return login; }RequestMapping:GetMapping就是方法二的简写其中value表示路径method表示请求方式如方法二只接受http请求的Get方式效果同上。c.producesRequestMapping(value login2,produces MediaType.APPLICATION_JSON_VALUE) ResponseBody public String t3(){ return login; }produces限定接口只能处理请求头Accept中包含application/json的请求如果客户端不接受JSON则匹配不到ResponseBody告诉Spring不要把返回值当成视图名而是通过HttpMessageConverter序列化为JSON字符串直接写入http响应体。访问结果d.URL占位符和PathVariableGetMapping(uid/{id}) ResponseBody public String t4(PathVariable(name id)String userId){ return 接收到了用户IDuserId; }正常的通过URL传递参数需要?id1234namexxxxx,而使用占位符就可以直接写值然后使用PathVariable接收就行了如果name/value指定占位符名后方法的参数位置可以任意也能正确接收。PathVariable:将占位符id的值绑定到方法参数userId上name指定占位符的名称当方法的参数名和占位符相同时可以省略name其中还有一个字段可以写required可以让该变量路径成为可选而不是必要但是这样URL没有提供占位符的相关id段的请求匹配不到该方法不建议写。执行效果如下e.RequestParam(URL中的请求参数)GetMapping(user) ResponseBody public String t5( RequestParam(value id, required false, defaultValue 9999) String userId, RequestParam(value name, required false, defaultValue 小明) String name ) { return 用户ID userId 用户姓名 name; }这个是使用URL的路径进行参数传递 具体为xxxx?id1234name小明进行传递URL中的参数顺序可以忽略如果不写value则需要URL的路径参数名和方法参数名一致。RequestParam中value id:表示将URL的查询参数id绑定到方法参数userId上。required false表示参数不是必须URL不传递id也不会报错defaultValue:当请求中没有id参数的时候id的默认值是9999传递参数结果当请求路径没有参数的时候f.RequestHeader(读取请求头)GetMapping(head) ResponseBody public String t6(RequestHeader(value sec-ch-ua-platform, required false) String head) { if (head null) { return 没有值; } return head; }RequestHeader表示从http请求头中提取指定字段并绑定到对应的方法参数中其中sec-ch-ua-platform表示提取请求头中这个字段对应的值并绑定到方法参数head中。requiredfalse表示如果请求头中如果没有这个参数的话方法参数就会使用java默认值不抛出异常。使用Postman进行测试请求方式使用get请求方式然后点击Headers设置请求头参数然后发送。请求体配置如下然后点击发送没有设置请求头其结果如下设置请求头后得到的响应体g.读取Cookie CookieValue注解PostMapping(cookie) ResponseBody public String t7( CookieValue(value cookie, required false, defaultValue 9090) String cookie ) { return cookie; }这个注解CookieValue表示读取用户cookierequiredfalse表示如果没有发送cookie也不会报错defaultValue表示设置默认值默认值为9090。使用 Postman测试直接在Headers添加。添加cookie没有添加cookieh.构建响应体PostMapping(body) public ResponseEntityString t8() { String created test; URI location URI.create(/items/ created); HttpHeaders headers new HttpHeaders(); headers.add(X-Request-Id, req- System.currentTimeMillis()); return ResponseEntity .created(location) .headers(headers) .body(created); }其中返回值ResponseEntity作为返回值可以自由控制HTTP状态码、响应头和响应体是比较灵活的方式。使用cmd进行测试,在cmd中输入如下代码curl -v -X POST http://localhost:9090/body结果如下* Host localhost:9090 was resolved. * IPv6: ::1 * IPv4: 127.0.0.1 * Trying [::1]:9090... * Connected to localhost (::1) port 9090 * using HTTP/1.x POST /body HTTP/1.1 Host: localhost:9090 User-Agent: curl/8.11.1 Accept: */* HTTP/1.1 201 Location: /items/test X-Request-Id: req-1786539124251 Content-Type: text/plain;charsetUTF-8 Content-Length: 4 Date: Wed, 12 Aug 2026 12:52:04 GMT test* Connection #0 to host localhost left intactI.ExceptionHandler统一异常处理GetMapping(exception) public String ExceptionMy(){ throw new RuntimeException(测试异常); }定义一个接口只要一访问就会发生异常然后定义一个异常处理类用来处理这个异常RestControllerAdvice(assignableTypes LoginController.class) public class AllException { ExceptionHandler(RuntimeException.class) public String t1() { return 运行期异常; } }RestControllerAdviceassignableTypes 参数表示只针对这个类生效当然括号当中还可以填写包路径表示对哪一个包进行监控。annotations RestController.class表示针对标注了RestController注解的类进行生效。运行结果如下先访问接口然后查看返回值注解/类作用Controller声明控制器方法返回 String 默认为视图名ResponseBody方法返回值直接写入响应体JSON/文本等GetMapping/PostMapping/RequestMapping映射请求 URL 及 HTTP 方法produces(属性)指定响应 Content-Type同时匹配 Accept 请求头PathVariable绑定 URL 路径中的占位符RequestParam绑定查询参数或表单参数RequestHeader绑定指定请求头的值CookieValue绑定指定 Cookie 的值ResponseEntity构建完整的 HTTP 响应状态码头体ExceptionHandler标记方法处理特定异常可指定异常类型支持控制器内或全局使用ControllerAdvice全局增强组件配合ExceptionHandler实现统一异常处理RestControllerAdvice组合ControllerAdviceResponseBody专用于 REST API 的全局异常处理ResponseStatus标注在异常类或ExceptionHandler方法上指定响应的 HTTP 状态码总结本文涵盖了 SpringBoot中MVC Controller 层最常用的核心注解从基础的 Controller、GetMapping 到参数绑定相关的 PathVariable、RequestParam、RequestHeader、CookieValue再到响应构建 ResponseEntity 和统一异常处理体系。掌握这些注解是开发 Spring Boot Web 应用的基础。
返回列表