洛阳建设三轮网站装饰公司响应式网站建设案例
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:29
当前位置: 首页 > news >正文
洛阳建设三轮网站,装饰公司响应式网站建设案例,window7 iis建立网站,网站开发有哪些要求标签#xff1a;Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖#xff0c;SpringBoot可以快速启动一个web容器#xff0c;简化项目的开发#xff1b; 在web开发中又涉及如下几个功能点#xff1a; 拦截器#xff1a;可以让接口被访问之前#xff0c;将请求拦截… 标签Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖SpringBoot可以快速启动一个web容器简化项目的开发 在web开发中又涉及如下几个功能点 拦截器可以让接口被访问之前将请求拦截到通过对请求的识别和校验判断请求是否允许通过 页面交互对于服务端的开发来说需要具备简单的页面开发能力解决部分场景的需求 Swagger接口通过简单的配置快速生成接口的描述并且提供对接口的测试能力 Junit测试通过编写代码的方式对接口进行测试从而完成对接口的检查和验证并且可以不入侵原代码结构 二、工程搭建 1、工程结构 2、依赖管理 !– 基础框架组件 – dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion\({spring-boot.version}/version /dependency !-- 接口文档组件 -- dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webmvc-ui/artifactIdversion\){springdoc.version}/version /dependency !– 前端页面组件 – dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactIdversion\({spring-boot.version}/version /dependency !-- 单元测试组件 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdversion\){spring-boot.version}/versionexclusionsexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactId/exclusion/exclusions /dependency dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion\({junit.version}/version /dependency三、Web开发 1、接口开发 编写四个简单常规的接口从对资源操作的角度也就是常说的增Post、删Delete、改Put、查Get并且使用了swagger注解可以快速生成接口文档 RestController Tag(name Rest接口) public class RestWeb {Operation(summary Get接口)GetMapping(rest/get/{id})public String restGet(PathVariable Integer id) {return OK:id;}Operation(summary Post接口)PostMapping(/rest/post)public String restPost(RequestBody ParamBO param){return OK:param.getName();}Operation(summary Put接口)PutMapping(/rest/put)public String restPut(RequestBody ParamBO param){return OK:param.getId();}Operation(summary Delete接口)DeleteMapping(/rest/delete/{id})public String restDelete(PathVariable Integer id){return OK:id;} }2、页面交互 对于服务端开发来说在部分场景下是需要进行简单的页面开发的比如通过页面渲染再去生成文件或者直接通过页面填充邮件内容等 数据接口 Controller public class PageWeb {RequestMapping(/page/view)public ModelAndView pageView (HttpServletRequest request){ModelAndView modelAndView new ModelAndView() ;// 普通参数modelAndView.addObject(name, cicada);modelAndView.addObject(time, 2023-07-12);// 对象模型modelAndView.addObject(page, new PageBO(7,页面数据模型));// List集合ListPageBO pageList new ArrayList() ;pageList.add(new PageBO(1,第一页));pageList.add(new PageBO(2,第二页));modelAndView.addObject(pageList, pageList);// Array数组PageBO[] pageArr new PageBO[]{new PageBO(6,第六页),new PageBO(7,第七页)} ;modelAndView.addObject(pageArr, pageArr);modelAndView.setViewName(/page-view);return modelAndView ;} }页面解析分别解析了普通参数实体对象集合容器数组容器等几种数据模型 div styletext-align: centerhr/h5普通参数解析/h5姓名span th:text\){name}/span时间span th:text\({time}/spanhr/h5对象模型解析/h5整形span th:text\){page.getKey()}/span字符span th:text\({page.getValue()}/spanhr/h5集合容器解析/h5table stylemargin:0 auto;width: 200pxtrthKey/ththValue/th/trtr th:eachpage:\){pageList}td th:text\({page.getKey()}/tdtd th:text\){page.getValue()}/td/tr/tablehr/h5数组容器解析/h5table stylemargin:0 auto;width: 200pxtrthKey/ththValue/th/trtr th:eachpage:\({pageArr}td th:text\){page.getKey()}/tdtd th:text${page.getValue()}/td/tr/tablehr/ /div效果图展示 四、拦截器 1、拦截器定义 通过实现HandlerInterceptor接口完成对两个拦截器的自定义请求在访问服务时必须通过两个拦截器的校验 /*** 拦截器一/ public class HeadInterceptor implements HandlerInterceptor {private static final Logger log LoggerFactory.getLogger(HeadInterceptor.class);Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {log.info(HeadInterceptor:preHandle);IteratorString headNames request.getHeaderNames().asIterator();log.info(request-header);while (headNames.hasNext()){String headName headNames.next();String headValue request.getHeader(headName);System.out.println(headName:headValue);}// 放开拦截return true;}Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {log.info(HeadInterceptor:postHandle);}Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler, Exception e) throws Exception {log.info(HeadInterceptor:afterCompletion);} }/** 拦截器二/ public class BodyInterceptor implements HandlerInterceptor {private static final Logger log LoggerFactory.getLogger(BodyInterceptor.class);Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {log.info(BodyInterceptor:preHandle);IteratorString paramNames request.getParameterNames().asIterator();log.info(request-param);while (paramNames.hasNext()){String paramName paramNames.next();String paramValue request.getParameter(paramName);System.out.println(paramName:paramValue);}// 放开拦截return true;}Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {log.info(BodyInterceptor:postHandle);}Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler, Exception e) throws Exception {log.info(BodyInterceptor:afterCompletion);} }2、拦截器配置 自定义拦截器之后还需要添加到web工程的配置文件中可以通过实现WebMvcConfigurer接口完成自定义的配置添加 Configuration public class WebMvcConfig implements WebMvcConfigurer {/** 添加自定义拦截器/Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new HeadInterceptor()).addPathPatterns(/);registry.addInterceptor(new BodyInterceptor()).addPathPatterns(/);} }五、测试工具 1、Swagger接口 添加上述的springdoc依赖之后还可以在配置文件中简单定义一些信息访问IP:端口/swagger-ui/index.html即可 Configuration public class WebMvcConfig implements WebMvcConfigurer {/** 接口文档配置/Beanpublic OpenAPI openAPI() {return new OpenAPI().info(new Info().title(【boot-web】).description(Rest接口文档-2023-07-11).version(1.0.0));} }2、Junit测试 在个人的习惯上Swagger接口文档更偏向在前后端对接的时候使用而Junit单元测试更符合开发的时候使用这里是对RestWeb中的接口进行测试 RunWith(SpringRunner.class) SpringBootTest AutoConfigureMockMvc public class RestWebTest {Autowiredprivate MockMvc mockMvc;Testpublic void testGet () throws Exception {// GET接口测试MvcResult mvcResult mockMvc.perform(MockMvcRequestBuilders.get(/rest/get/1)).andReturn();printMvcResult(mvcResult);}Testpublic void testPost () throws Exception {// 参数模型JsonMapper jsonMapper new JsonMapper();ParamBO param new ParamBO(null,单元测试,new Date()) ;String paramJson jsonMapper.writeValueAsString(param) ;// Post接口测试MvcResult mvcResult mockMvc.perform(MockMvcRequestBuilders.post(/rest/post).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).content(paramJson)).andReturn();printMvcResult(mvcResult);}Testpublic void testPut () throws Exception {// 参数模型JsonMapper jsonMapper new JsonMapper();ParamBO param new ParamBO(7,Junit组件,new Date()) ;String paramJson jsonMapper.writeValueAsString(param) ;// Put接口测试MvcResult mvcResult mockMvc.perform(MockMvcRequestBuilders.put(/rest/put).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).content(paramJson)).andReturn();printMvcResult(mvcResult);}Testpublic void testDelete () throws Exception {// Delete接口测试MvcResult mvcResult mockMvc.perform(MockMvcRequestBuilders.delete(/rest/delete/2)).andReturn();printMvcResult(mvcResult);}/** 打印【MvcResult】信息*/private void printMvcResult (MvcResult mvcResult) throws Exception {System.out.println(请求-URI【mvcResult.getRequest().getRequestURI()】);System.out.println(响应-status【mvcResult.getResponse().getStatus()】);System.out.println(响应-content【mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8)】);} }六、参考源码 文档仓库 https://gitee.com/cicadasmile/butte-java-note源码仓库 https://gitee.com/cicadasmile/butte-spring-parent
- 上一篇: 洛阳建设三轮网站wordpress关注公众号可见
- 下一篇: 洛阳建站公司效果企石镇仿做网站
相关文章
-
洛阳建设三轮网站wordpress关注公众号可见
洛阳建设三轮网站wordpress关注公众号可见
- 技术栈
- 2026年04月20日
-
洛阳便宜网站建设公司建设工程安全管理网站
洛阳便宜网站建设公司建设工程安全管理网站
- 技术栈
- 2026年04月20日
-
洛江网站建设报价商务网站建设是什么
洛江网站建设报价商务网站建设是什么
- 技术栈
- 2026年04月20日
-
洛阳建站公司效果企石镇仿做网站
洛阳建站公司效果企石镇仿做网站
- 技术栈
- 2026年04月20日
-
洛阳孟津网站建设网站域名申请怎么做
洛阳孟津网站建设网站域名申请怎么做
- 技术栈
- 2026年04月20日
-
洛阳免费网站建设珠海网站建设小小网络
洛阳免费网站建设珠海网站建设小小网络
- 技术栈
- 2026年04月20日
