SpringBoot_03_Web开发
发布时间:2026/9/27 1:34:10来源:尧图网络
【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 监控。
网站建设高端定制企业官网