尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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

相关推荐

人工智能读书报告:从知识抽取到代码复现的工程化实践

人工智能读书报告:从知识抽取到代码复现的工程化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 1:34:09
安路TD联合Modelsim仿真实战避坑指南:从license到波形调试

安路TD联合Modelsim仿真实战避坑指南:从license到波形调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 1:34:09
TI双芯片UCC28180+UCC28950电源协同设计实战指南

TI双芯片UCC28180+UCC28950电源协同设计实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 1:34:09
MORE NEWS

更多资讯

📰

嵌入式烧录版本管理:从芯片启动失效到全链路可追溯

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

3步搞定征婚网站建设:拒绝拖延,性能优化实战指南

3步搞定征婚网站建设:拒绝拖延,性能优化实战指南 改个需求建站公司拖一周,这种憋屈事儿你是不是也遇到过?别骂了,今天直接给你一套 征婚网站建设…

📰

3个技巧搞定wordpress笑话站主题,新手选哪家好

3个技巧搞定wordpress笑话站主题,新手选哪家好 不会写代码想做个站?别慌,这行老手教你选对wordpress笑话站主题。很多人卡在“哪家好”这一步,其实核心是看模板是否适配你的内容结构。下面直接上干货,按项目流程拆给你看。…

📰

VSCode+ESP8266 RTOS_SDK环境搭建:编译烧录全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

浙江站长避坑指南:一文搞懂装饰设计网站模板

浙江站长避坑指南:一文搞懂装饰设计网站模板 找建站公司怕被坑高价,这是很多刚入行做装饰设计站长的噩梦。你拿着几万块的预算去谈,对方张口就是“高端定制”,最后发现就是个套皮模板,改个颜色还要加钱。别急,今天咱们不整虚的,直接拆解…

📰

重复率和AI率都高,有哪些免费工具能同时降重和降AI?

重复率和AI率都高,有哪些免费工具能同时降重和降AI? 查重报告显示好几处与文献重合,AI检测又提示综述和结论需要修改。你担心先降重会把句子改得更像模板,先降AI又可能增加重复表述。有没有能同时处理两个问题、还可以先免费试的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬