新闻详情

新闻详情

首页 / 资讯中心 / 详情

SpringBoot_03_Web开发

发布时间:2026/9/27 1:34:10来源:尧图网络
SpringBoot_03_Web开发
【Spring Boot】Web 开发RESTful API、拦截器与全局异常处理关键词Java、Spring Boot、Web开发、RESTful、拦截器、全局异常、跨域CORS一、Spring Boot Web 开发基础引入spring-boot-starter-web后自动包含Spring MVC、内嵌 Tomcat、Jackson。RestControllerRequestMapping(/api/users)publicclassUserController{AutowiredprivateUserServiceuserService;GetMappingpublicListUserlist(){returnuserService.findAll();}GetMapping(/{id})publicUsergetById(PathVariableLongid){returnuserService.findById(id);}PostMappingpublicUsercreate(RequestBodyUseruser){returnuserService.save(user);}PutMapping(/{id})publicUserupdate(PathVariableLongid,RequestBodyUseruser){user.setId(id);returnuserService.update(user);}DeleteMapping(/{id})publicvoiddelete(PathVariableLongid){userService.deleteById(id);}}二、统一响应格式publicclassResultT{privateintcode;privateStringmessage;privateTdata;privateResult(intcode,Stringmessage,Tdata){this.codecode;this.messagemessage;this.datadata;}publicstaticTResultTsuccess(Tdata){returnnewResult(200,success,data);}publicstaticTResultTerror(intcode,Stringmessage){returnnewResult(code,message,null);}}使用GetMapping(/{id})publicResultUsergetById(PathVariableLongid){returnResult.success(userService.findById(id));// 响应{code:200,message:success,data:{...}}}三、全局异常处理3.1 RestControllerAdviceRestControllerAdvicepublicclassGlobalExceptionHandler{ExceptionHandler(BusinessException.class)publicResult?handleBusinessException(BusinessExceptione){returnResult.error(e.getCode(),e.getMessage());}ExceptionHandler(MethodArgumentNotValidException.class)publicResult?handleValidException(MethodArgumentNotValidExceptione){Stringmsge.getBindingResult().getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.joining(; ));returnResult.error(400,msg);}ExceptionHandler(Exception.class)publicResult?handleException(Exceptione){e.printStackTrace();returnResult.error(500,服务器内部错误);}}3.2 自定义业务异常publicclassBusinessExceptionextendsRuntimeException{privateintcode;publicBusinessException(intcode,Stringmessage){super(message);this.codecode;}publicintgetCode(){returncode;}}// 使用publicUserfindById(Longid){UseruseruserMapper.selectById(id);if(usernull){thrownewBusinessException(404,用户不存在);}returnuser;}四、拦截器ComponentpublicclassAuthInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{Stringtokenrequest.getHeader(Authorization);if(tokennull||token.isEmpty()){response.setStatus(401);response.setContentType(application/json;charsetUTF-8);response.getWriter().write({\code\:401,\message\:\未登录\});returnfalse;}returntrue;}}注册ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{AutowiredprivateAuthInterceptorauthInterceptor;OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(authInterceptor).addPathPatterns(/api/**).excludePathPatterns(/api/login,/api/register);}}五、跨域处理CORS5.1 全局配置推荐ConfigurationpublicclassCorsConfigimplementsWebMvcConfigurer{OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry.addMapping(/**).allowedOriginPatterns(*).allowedMethods(GET,POST,PUT,DELETE,OPTIONS).allowedHeaders(*).allowCredentials(true).maxAge(3600);}}5.2 局部配置RestControllerCrossOrigin(originshttp://localhost:3000)publicclassUserController{}六、参数校验引入依赖spring-boot-starter-validation在 DTO 上使用校验注解publicclassUserDTO{NotBlank(message用户名不能为空)Size(min2,max20,message用户名长度2-20)privateStringusername;Email(message邮箱格式不正确)privateStringemail;Min(value1,message年龄最小为1)Max(value150,message年龄最大为150)privateIntegerage;}// Controller 中加 Valid 触发校验PostMappingpublicResultUsercreate(RequestBodyValidUserDTOdto){returnResult.success(userService.save(dto));}// 校验失败自动抛出 MethodArgumentNotValidException由全局异常处理器处理七、WebMvcConfigurer 常用方法汇总ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){}// 拦截器OverridepublicvoidaddCorsMappings(CorsRegistryregistry){}// 跨域OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){}// 静态资源OverridepublicvoidaddViewControllers(ViewControllerRegistryregistry){}// 视图控制器OverridepublicvoidaddFormatters(FormatterRegistryregistry){}// 日期格式化}八、面试高频问题Q1Spring Boot 中如何实现跨域答实现WebMvcConfigurer重写addCorsMappings方法。可以全局配置推荐或使用CrossOrigin注解局部配置。核心设置allowedOriginPatterns、allowedMethods、allowedHeaders。Q2RestControllerAdvice 和 ControllerAdvice 的区别答ControllerAdvice需配合ResponseBody才能返回 JSONRestControllerAdviceControllerAdviceResponseBody直接返回 JSON。Spring Boot 项目推荐用RestControllerAdvice。Q3Spring Boot 的参数校验怎么用答引入spring-boot-starter-validationDTO 字段使用NotBlank、Email、Min等注解Controller 参数加Valid触发校验。校验失败抛出MethodArgumentNotValidException由全局异常处理器统一处理。九、总结功能核心类/注解要点RESTful APIRestController标准 CRUD 接口统一响应Result 封装success() / error()全局异常RestControllerAdviceExceptionHandler拦截器HandlerInterceptoraddInterceptors跨域addCorsMappings全局/局部配置参数校验Valid 注解NotBlank, Email, Min下一篇《Spring Boot 数据层整合》详解 MyBatis 整合、事务管理与 Actuator 监控。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

网站集约建设原因:不懂代码怎么搭,多少钱才不亏 2026/9/27 6:41:10

网站集约建设原因:不懂代码怎么搭,多少钱才不亏

网站集约建设原因:不懂代码怎么搭,多少钱才不亏 自己不会代码想做网站,最怕的就是问了一圈,报价从几千到几万都有,心里直打鼓:这钱花得值不值?其实,很多甲方一上来就问“做这个网站多少钱”,但懂行的人都知道,价格背后是架构选择。选错了架构,后期…

阅读更多 →
别再伺候框架了:一个条件类看懂 SimpleDAO 的全部哲学——回归 SQL 本质的三件事 2026/9/27 6:41:10

别再伺候框架了:一个条件类看懂 SimpleDAO 的全部哲学——回归 SQL 本质的三件事

先看一段代码,再决定要不要读这篇文章 Setter Getter public class ReportCond extends BaseCondition {/*** 方法说明 拼加条件**/Overrideprotected void addCondition() {add("AND r.build_number ?", buildNumber); // 等值add("…

阅读更多 →
论文AI率0%黑科技!AI智能降重工具留学生亲测:Turnitin检测AI率直接归零全绿通过 2026/9/27 6:41:04

论文AI率0%黑科技!AI智能降重工具留学生亲测:Turnitin检测AI率直接归零全绿通过

写论文用AI确实省心又高效,特别是面对一堆硬核专业术语和复杂逻辑的时候,AI能帮你快速生成内容,简直像开了外挂。但千万别以为这样就万事大吉了,现在越来越多学校开始用Turnitin等工具严格检测AI痕迹,一旦被发现&#…

阅读更多 →
2026最新培训机构一般在什么网站做推广?附避坑报价单 2026/9/27 6:41:03

2026最新培训机构一般在什么网站做推广?附避坑报价单

2026最新培训机构一般在什么网站做推广?附避坑报价单 找建站公司怕被坑高价?这大概是2026年最新行业调研中,甲方老板们吐槽最多的痛点。很多做教培的朋友,花了几万块做个站,结果连百度首页都上不去,更别提转化了。其实,…

阅读更多 →
清渊传奇H5_安卓端与电脑端三端互通源码 2026/9/27 6:41:02

清渊传奇H5_安卓端与电脑端三端互通源码

清渊传奇H5免费单机传奇源码下载免费单机传奇源码下载:www5300pkcom是一款以经典传奇为底色的横版H5冒险游戏-安卓端与电脑端的三端互通。清渊白鹭冰雪H5完整版 Linux手工服务端转表工具GM后台视频教程全套源码搭建测试系统:系统:LINUXNginx 1.20MySQL 5…

阅读更多 →
用 AI 写代码两年,我长了三个很难自己察觉的坏习惯 2026/9/27 6:40:56

用 AI 写代码两年,我长了三个很难自己察觉的坏习惯

两年前我开始把写代码这件事分一半给 AI。 到现在回头看,速度确实上来了,但同时也长出三个坏习惯,而且很不容易自己察觉。这篇把三个坏习惯和我后来的改法都写清楚。 先看变化清单 变了的地方实际感受写样板代码基本不用自己敲&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉