经典重庆网站济南公司

web/2025/10/1 3:22:22/文章来源:
经典重庆网站,济南公司,使用apmserv本地搭建多个网站,重庆网上房地产网站随着JAX-RS API的发展#xff0c;以及今年早些时候在JSR-339下发布的2.0版本#xff0c;使用出色的Java平台创建REST服务变得更加容易。 但是#xff0c;极大的简化带来了巨大的责任#xff1a;记录所有这些API#xff0c;以便其他开发人员可以快速了解如何使用它们。 不… 随着JAX-RS API的发展以及今年早些时候在JSR-339下发布的2.0版本使用出色的Java平台创建REST服务变得更加容易。 但是极大的简化带来了巨大的责任记录所有这些API以便其他开发人员可以快速了解如何使用它们。 不幸的是在这方面开发人员只能靠自己 JSR-339并没有太大帮助。 可以肯定的是从源代码生成冗长且易于遵循的文档而不是要求某人在开发过程中编写它真是太棒了。 听起来不真实对吧 在某种程度上确实如此但是帮助以Swagger的形式出现。 本质上 Swagger做的是一件简单但非常强大的事情通过添加一些附加注释它会生成REST API描述 HTTP方法路径/查询/表单参数响应 HTTP错误代码等甚至提供了一个简单的Web UI来玩对您的API的REST调用更不用说所有这些元数据也可以通过REST获得。 在深入研究实现细节之前让我们快速看一下Swagger来自API消费者预期的含义。 假设您已经开发了一种出色的REST服务来管理人员。 作为良好的公民此REST服务具有完整的功能并提供以下功能 列出所有人 GET 通过电子邮件查找人 GET 添加新人 POST 更新现有人员 PUT 最后删除人 DELETE 从Swagger的角度来看这是相同的API 看起来很漂亮。 让我们做更多的事情并从Swagger UI调用我们的REST服务这真棒。 最复杂的用例是添加新人 POST 因此将仔细研究这一情况。 如您在上面的快照中所见每一个REST服务调用都存在 服务说明 相对语境路径 参数形式/路径/查询必需或可选 HTTP状态码 201 CREATED和409 CONFLICT 准备出发尝试一下 立即调用REST服务具有开箱即用的参数验证功能 为了完成演示部分让我展示另一个示例其中涉及REST资源在我们的例子中这是一个简单的Person类。 Swagger能够提供其属性和有意义的描述以及预期的响应内容类型。 看起来不错 转到下一部分所有内容都与实现细节有关。 Swagger支持与JAX-RS服务的无缝集成在现有注释的顶部仅需几个附加注释。 首先在我们的示例中应该记录的每个单个JAX-RS服务都应使用Api注释进行注释 Path( /people ) Api( value /people, description Manage people ) public class PeopleRestService {// ... } 接下来相同的方法适用于REST服务操作应该记录的每个方法都应使用ApiOperation批注可选并使用 ApiResponses / ApiResponse进行批注 。 如果它接受参数则应使用ApiParam批注进行批注。 这里有几个例子 Produces( { MediaType.APPLICATION_JSON } ) GET ApiOperation( value List all people, notes List all people using paging, response Person.class, responseContainer List ) public Collection Person getPeople( ApiParam( value Page to fetch, required true ) QueryParam( page) DefaultValue( 1 ) final int page ) {// ... } 还有一个 Produces( { MediaType.APPLICATION_JSON } ) Path( /{email} ) GET ApiOperation( value Find person by e-mail, notes Find person by e-mail, response Person.class ) ApiResponses( {ApiResponse( code 404, message Person with such e-mail doesnt exists ) } ) public Person getPeople( ApiParam( value E-Mail address to lookup for, required true ) PathParam( email ) final String email ) {// ... } REST资源类或模型类需要特殊的注释 ApiModel和ApiModelProperty 。 这是我们的Person类的样子 ApiModel( value Person, description Person resource representation ) public class Person {ApiModelProperty( value Persons first name, required true ) private String email;ApiModelProperty( value Persons e-mail address, required true ) private String firstName;ApiModelProperty( value Persons last name, required true ) private String lastName;// ... } 最后一步是将Swagger插入JAX-RS应用程序。 我开发的示例使用Spring Framework Apache CXF Swagger UI和嵌入式Jetty 完整项目可在Github上找到 。 集成Swagger只需添加配置bean swaggerConfig 一个附加的JAX-RS服务 apiListingResourceJson 和两个JAX-RS提供程序 resourceListingProvider和apiDeclarationProvider 即可。 package com.example.config;import java.util.Arrays;import javax.ws.rs.ext.RuntimeDelegate;import org.apache.cxf.bus.spring.SpringBus; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.env.Environment;import com.example.resource.Person; import com.example.rs.JaxRsApiApplication; import com.example.rs.PeopleRestService; import com.example.services.PeopleService; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.wordnik.swagger.jaxrs.config.BeanConfig; import com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider; import com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON; import com.wordnik.swagger.jaxrs.listing.ResourceListingProvider;Configuration public class AppConfig {public static final String SERVER_PORT server.port;public static final String SERVER_HOST server.host;public static final String CONTEXT_PATH context.path; Bean( destroyMethod shutdown )public SpringBus cxf() {return new SpringBus();}Bean DependsOn( cxf )public Server jaxRsServer() {JAXRSServerFactoryBean factory RuntimeDelegate.getInstance().createEndpoint( jaxRsApiApplication(), JAXRSServerFactoryBean.class );factory.setServiceBeans( Arrays. Object asList( peopleRestService(), apiListingResourceJson() ) );factory.setAddress( factory.getAddress() );factory.setProviders( Arrays. Object asList( jsonProvider(), resourceListingProvider(), apiDeclarationProvider() ) );return factory.create();}Bean Autowiredpublic BeanConfig swaggerConfig( Environment environment ) {final BeanConfig config new BeanConfig();config.setVersion( 1.0.0 );config.setScan( true );config.setResourcePackage( Person.class.getPackage().getName() );config.setBasePath( String.format( http://%s:%s/%s%s,environment.getProperty( SERVER_HOST ),environment.getProperty( SERVER_PORT ),environment.getProperty( CONTEXT_PATH ),jaxRsServer().getEndpoint().getEndpointInfo().getAddress() ) );return config;}Beanpublic ApiDeclarationProvider apiDeclarationProvider() {return new ApiDeclarationProvider();}Beanpublic ApiListingResourceJSON apiListingResourceJson() {return new ApiListingResourceJSON();}Beanpublic ResourceListingProvider resourceListingProvider() {return new ResourceListingProvider();}Bean public JaxRsApiApplication jaxRsApiApplication() {return new JaxRsApiApplication();}Bean public PeopleRestService peopleRestService() {return new PeopleRestService();}// ... } 为了摆脱任何可能的硬编码配置所有参数都通过命名属性 SERVER_PORT SERVER_HOST和CONTEXT_PATH 传递。 Swagger公开了其他REST端点来提供API文档在我们的示例中可以通过以下网址访问它 http// localhost8080 / rest / api / api-docs 。 Swagger UI使用它它本身已嵌入最终的JAR存档中并由Jetty用作静态Web资源。 最后一个难题是启动嵌入式Jetty容器该容器将所有这些部件粘合在一起并封装到Starter类中 package com.example;import org.apache.cxf.transport.servlet.CXFServlet; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.resource.Resource; import org.springframework.core.io.ClassPathResource; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import com.example.config.AppConfig;public class Starter {private static final int SERVER_PORT 8080;private static final String CONTEXT_PATH rest;public static void main( final String[] args ) throws Exception {Resource.setDefaultUseCaches( false );final Server server new Server( SERVER_PORT ); System.setProperty( AppConfig.SERVER_PORT, Integer.toString( SERVER_PORT ) );System.setProperty( AppConfig.SERVER_HOST, localhost );System.setProperty( AppConfig.CONTEXT_PATH, CONTEXT_PATH ); // Configuring Apache CXF servlet and Spring listener final ServletHolder servletHolder new ServletHolder( new CXFServlet() ); final ServletContextHandler context new ServletContextHandler(); context.setContextPath( / );context.addServlet( servletHolder, / CONTEXT_PATH /* ); context.addEventListener( new ContextLoaderListener() ); context.setInitParameter( contextClass, AnnotationConfigWebApplicationContext.class.getName() );context.setInitParameter( contextConfigLocation, AppConfig.class.getName() );// Configuring Swagger as static web resourcefinal ServletHolder swaggerHolder new ServletHolder( new DefaultServlet() );final ServletContextHandler swagger new ServletContextHandler();swagger.setContextPath( /swagger );swagger.addServlet( swaggerHolder, /* );swagger.setResourceBase( new ClassPathResource( /webapp ).getURI().toString() );final HandlerList handlers new HandlerList();handlers.addHandler( context );handlers.addHandler( swagger );server.setHandler( handlers );server.start();server.join(); } } 几点评论使事情变得更加清晰我们的JAX-RS服务将在/ rest / *上下文路径下可用而Swagger UI在/ swagger上下文路径下可用。 关于Resource.setDefaultUseCachesfalse的一个重要说明因为我们正在从JAR文件提供静态Web内容所以必须将此属性设置为false作为此bug的解决方法。 现在让我们通过输入以下内容来构建并运行我们的JAX-RS应用程序 mvn clean package java -jar target/jax-rs-2.0-swagger-0.0.1-SNAPSHOT.jar 稍后您的浏览器中将提供Swagger UI 网址为 http// localhost8080 / swagger / 最后一点关于Swagger还有很多话要说但是我希望这个简单的示例能够显示出使我们的REST服务具有自文档化的功能并且只需很少的工作即可轻松使用。 非常感谢Wordnik团队。 源代码可在Github上获得 。 参考 Swagger让开发人员喜欢在我们的JCG合作伙伴 Andrey Redko {devmind}博客上使用您的REST API 。 翻译自: https://www.javacodegeeks.com/2013/10/swagger-make-developers-love-working-with-your-rest-api.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳团购网站设计价格wordpress需要的插件

一句话总结:看起来复杂,动规分析以后就比较简单。 原题链接:583 两个字符串的删除操作 本质就是求两个字符串的最短子序列的长度。已经做过,不再详解。 class Solution {public int minDistance(String word1, String word2) {/…

长沙网站设计多少钱一个月如何注册网站域名

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?我们来试试用.NET Core从Windows环境开发,然后porting到Linux环境(布署及执行.NET Core),之前曾看过stackoverflow文章提到Mono的性能问题&…

成都锦江建设局网站惠州做棋牌网站建设哪家公司收费合理

前言 今天给大家带来一款单机游戏的架设:新天龙八部之14门派绝情谷版一键端紫色穿刺 无字谱,金陵天外。 如今市面上的资源参差不齐,大部分的都不能运行,本人亲自测试,运行视频如下: [单机版]新天龙八部之…

齐博网站模板wordpress a 锚点

介绍 提示:文章仅供交流学习,严禁用于非法用途,如有不当可联系本人删除 最近某盾新推出了,滑块拼图验证码,如下图所示,这篇文章介绍怎么识别滑块距离相关。 参数attrs 通过GET请求获取的参数attrs, 决…

营销型网站建设题库网站备案为什么 没有批复文件

点击“打开/下载题目”进去看看情况: 为了方便查看翻译成中文简体来看: emmm,看不懂什么意思,查看源代码,js表示是一段JavaScript代码,丢给AI分析一下: // server.js const express require(&…

织梦优美文章阅读网站源码平面设计软件手机

前提准备: gitlab中上传相应的jenkinsfile文件和源码。 安装和破解ansible-tower。 安装jenkins。 大致流程:从gitlab中拉取文件,存放到windows机器上,使用nuget等进行打包到windows中,使用sshPublisher语句传输到远程…

松江做网站多少钱手机网站欢迎页面设计

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统,包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要,由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面,采用 3.3V 直流电源供…

企业为什么要建设自己的网站盐城哪有做网站建设的

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

学校网站建设策划书模板wordpress去掉边栏

在实际工作中会遇到,最近有需求将产品炸开bom到底层,但是ERP中bom数据在一张表中递归存储的,不循环展开,是无法知道最底层原材料是什么。 在ERP中使用pl/sql甚至sql是可以进行炸BOM的,但是怎么使用spark展开&#xff0…

资阳网站建设临海大经建设集团网站

谈到数据库,大家第一想法就是怎么去优化,怎么让查询操作更快。我认为最好的方式就是从开始数据库设计的时候就要尽量考虑周全。如果不幸是个老项目,就得从优化入手了。接下就从设计和优化谈一下我的一些认识和经验。1:数据库的设计…

表白网站制作源代码抖音代运营公司经营范围

Metasploit框架的auxiliary模块涵盖了许多不同的功能,包括扫描、枚举、信息收集和漏洞探测等。以下是一些常见的auxiliary模块及其使用案例: 1. 端口扫描 auxiliary/scanner/portscan/tcp:TCP端口扫描。 use auxiliary/scanner/portscan/tcp…

国外互联网资讯网站制作公司网站要多少费用呢

亲爱的技术探索者们,今天我要向大家隆重推荐一个在开源社区中崭露头角的项目——RWKV_Pytorch。这是一个基于Pytorch的RWKV大语言模型推理框架,它不仅具备高效的原生Pytorch实现,而且还扩展了对多种硬件的适配支持,让模型的部署和…

泉州企业自助建站系统网站空间是指什么

用批处理或DOS更改属性。批处理就是建个记事本,输入attrib -h -s -r %~dp0\*.* /s /d,然后另存为随便.bat,把它放到那些隐藏文件夹外面(不是里面),然后双击打开,等它自己关闭窗口就好了转载于:h…

swipe类网站长沙人才招聘网长沙58同城招聘网

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

mvc5 网站开发之美wordpress伪静态别名

1. S-Function简介 S-Function是system-function的缩写。说得简单,S-Function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。 2. MEX函数与M文件的区别 第一, MEX 函数能实现的回调函数比…

c2c网站建设价格设计网站推荐原因

第一章:引言 小程序开发近年来取得了快速的发展,成为了移动应用开发的重要一环。随着人工智能技术的飞速发展,越来越多的企业开始探索如何将人工智能应用于小程序开发中,为用户提供更智能、便捷的服务。本文将带您一起探索人工智能…

php企业网站开发深圳app设计

在这篇文章中,我将解释如何使用Gatling项目为您的JAX-RS Java EE端点编写压力测试,以及如何将它们与Gradle和Jenkins Pipeline集成,因此,除了进行简单的压力测试外,您还可以使用以下方法: 连续的压力测试&a…

做外贸雨伞到什么网站网站集约建设报告

求。ip提取网站源码带采集 要求是PHP源码。必须带采集类似 小峰IP提取网站,安小莫IP提取,迷惘IP提取,冰封IP提取免费类型的 不要淘宝类型的 200 转载于:https://www.cnblogs.com/PS-apple/p/4342866.html

兰州移动端网站建设购物网站html代码

转载自“搜狗测试”微信。 人员培养的痛点 大家在组内人员培养是否遇到了如下问题: 组员成长缓慢,无法达到预期 有时候感觉组员没啥进步,有时候感觉组员挺好的,无法统一评价 脑子里都是组员的问题,无法集中精力做其他…

免费网站模板 html如何对自己做的php网站加密

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024) 会议简介 2024国际化学材料、清洁能源和生物技术大会(ICCMCEB2024)将在长沙隆重举行。本次会议旨在汇聚来自世界各地的化学材料、清洁能源和生物技术领域的专家学者,共同探…