基于Rest的API解决方案(jersey与swagger集成)

一、项目目标

动静分离的架构,即客户端和服务器端的分离,客户端可以是IOS、android或者静态的页面。需要服务器端提供webservice服务,并且为了方便编写api接口文档,所以引入了swagger。

二、技术选型

为什么使用jersey而不用spring mvc

虽然spring-web提供了REST的功能,但是没有实现JAX-RS的标准。

二、maven配置

Java代码

<properties>
 <jetty.version>8.1.16.v20140903</jetty.version>
 <jersey.version>2.9</jersey.version>
 <spring.version>4.0.1.RELEASE</spring.version>
</properties> 

<dependency>
 <groupId>io.swagger</groupId>
 <artifactId>swagger-jersey2-jaxrs</artifactId
 <version>1.5.9</version>
 <exclusions>
  <exclusion>
   <groupId>javax.ws.rs</groupId>
   <artifactId>jsr311-api</artifactId>
  </exclusion>
 </exclusions>
</dependency> 

<dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet</artifactId>
 <version>${jersey.version}</version>
</dependency>
<dependency>
 <groupId>org.glassfish.jersey.media</groupId>
 <artifactId>jersey-media-json-jackson</artifactId>
 <version>${jersey.version}</version>
</dependency>
<!-- jersey-spring -->
<dependency>
 <groupId>org.glassfish.jersey.ext</groupId>
 <artifactId>jersey-spring3</artifactId>
 <version>${jersey.version}</version>
 <exclusions>
  <exclusion>
   <groupId>org.springframework</groupId>
   <artifactId>spring-beans</artifactId>
  </exclusion>
  <exclusion>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
  </exclusion>
  <exclusion>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
  </exclusion>
 </exclusions>
</dependency>
还需要引入spring的包,作者使用的是4.0.1.RELEASE 

三、swagger的操作

3.1swagger ui 准备

下载地址:https://github.com/swagger-api/swagger-ui

swagger其实就是一套静态页面,自定义了一套api的json格式,通过解析json将api展现出来。

下载之后将静态页面放在webapp目录下即可,还需要改一下index.html中的url地址,改成本地的api接口地址即可。

3.2注册

注册swagger,即将swagger的rest服务注册到jersey中。

register(io.swagger.jaxrs.listing.ApiListingResource.class);
register(io.swagger.jaxrs.listing.AcceptHeaderApiListingResource.class);
register(io.swagger.jaxrs.listing.SwaggerSerializers.class);

四、swagger集成过程中遇到的坑

4.1 jackson中报类型找不到,class java.lang.String

解决方法:更新jackson包

Java代码

<dependency>
 <groupId>com.fasterxml.jackson.jaxrs</groupId>
 <artifactId>jackson-jaxrs-json-provider</artifactId>
 <version>2.7.4</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.jaxrs</groupId>
 <artifactId>jackson-jaxrs-base</artifactId>
 <version>2.7.4</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-annotations</artifactId>
 <version>2.7.4</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.datatype</groupId>
 <artifactId>jackson-datatype-joda</artifactId>
 <version>2.7.4</version>
</dependency> 

4.2 swagger-ui.js中报的错误

4.2.1 operation is null, 大概在2338行

Java代码

operation = path[method];
[b]if (operation === null) continue;[/b]
var sharedParameters = path.parameters || [];
var parameters = operation.parameters || [];
for (i in sharedParameters) {
 var parameter = sharedParameters[i];
 parameters.unshift(parameter);
}
if(method !== 'parameters' && _.isObject(operation)) {
 operation.parameters = operation.parameters || parameters;
} 

4.2.2 enumValues is null, 大概在4383行

Java代码

if ([b]enumValues != null &&[/b] typeof enumValues !== 'undefined') {
 var id;
 param.allowableValues = {};
 param.allowableValues.values = [];
 param.allowableValues.descriptiveValues = [];
 for (id = 0; id < enumValues.length; id++) {
 var value = enumValues[id];
 var isDefault = (value === param.default || value+'' === param.default);
 param.allowableValues.values.push(value);
 // Always have string for descriptive values....
 param.allowableValues.descriptiveValues.push({value : value+'', isDefault: isDefault});
 } 

最终结果

以上这篇基于Rest的API解决方案(jersey与swagger集成)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot集成springfox-swagger2构建restful API的方法教程

    前言 之前跟大家分享了Spring MVC集成springfox-swagger2构建restful API,简单写了如何在springmvc中集成swagger2.这边记录下在springboot中如何集成swagger2.其实使用基本相同. 方法如下: 首先还是引用相关jar包.我使用的maven,在pom.xml中引用相关依赖(原来我使用的是2.2.0的,现在使用2.4.0的): <dependency> <groupId>io.springfox</groupId&g

  • Spring MVC集成springfox-swagger2构建restful API的方法详解

    前言 在集成springfox-swagger2之前,我也尝试着集成了swagger-springmvc,方式差不多,但是swagger-springmvc相对麻烦一点,因为要把它的静态文件copy到自己的项目中.所以还是用新版本的. 至于两者有什么不同,为什么进行版本变更请参见官方说明文档 方法如下 这里先写下需要的pom.xml配置(我引用的2.4.0,相对稳定) <dependency> <groupId>io.springfox</groupId> <ar

  • 基于Rest的API解决方案(jersey与swagger集成)

    一.项目目标 动静分离的架构,即客户端和服务器端的分离,客户端可以是IOS.android或者静态的页面.需要服务器端提供webservice服务,并且为了方便编写api接口文档,所以引入了swagger. 二.技术选型 为什么使用jersey而不用spring mvc 虽然spring-web提供了REST的功能,但是没有实现JAX-RS的标准. 二.maven配置 Java代码 <properties> <jetty.version>8.1.16.v20140903</j

  • .Net基于MVC4 Web Api输出Json格式实例

    本文实例讲述了.Net基于MVC4 Web Api输出Json格式的方法,分享给大家供大家参考.具体实现方法如下: 1.Global 中增加json输出 复制代码 代码如下: GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json"

  • 基于字符串常用API(详解)

    API(Application Programming Interface):应用程序编程接口 使用Scanner 获取键盘录入的字符串 next() ; 在遇到空格的时候 会判定为当前的输入结束 空格之后的内容会收不到 nextLine(); 可以避免被空格中断 , 但是在于接收数字一起使用的时候会被干扰 创建字符串对象 public String(String original) ---> 通过字符串创建一个字符串对象 public String(char[] value) -=--> 通

  • 基于百度地图api清除指定覆盖物(Overlay)的方法

    最近用百度地图api做项目,需要同时在地图显示marker与Polyline,且Polyline需要根据点击来显示或清除,所以遇到了清除指定覆盖物的问题,各种搜索后未能找到完美的解决方法,通过自己思考,摸索了一方法能解决这个问题,发出来给大家分享.好了,进入正题: 清除覆盖物有两个方法:map.removeOverlay()或者 map.clearOverlays(),clearOverlays()方法一次移除所有的覆盖物,removeOverlay()一次移除一个指定覆盖物,显然,我要一次移除

  • 基于python图像处理API的使用示例

    1.图像处理库 import cv2 as cv from PIL import * 常用的图像处理技术有图像读取,写入,绘图,图像色彩空间转换,图像几何变换,图像形态学,图像梯度,图像边缘检测,图像轮廓,图像分割,图像去噪,图像加水印以及修复水印等 2.opencv常用的接口 cv.imread() 读取图片,返回numpy cv.imwrite() 写入图片 cv.cvtColor() 图像色彩空间转换 cv.add() cv.subtract() cv.multiply() cv.divi

  • 基于Web Audio API实现音频可视化效果

    网页音频接口最有趣的特性之一它就是可以获取频率.波形和其它来自声源的数据,这些数据可以被用作音频可视化.这篇文章将解释如何做到可视化,并提供了一些基础使用案例. 基本概念节 要从你的音频源获取数据,你需要一个 AnalyserNode节点,它可以用 AudioContext.createAnalyser() 方法创建,比如: var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); var analyser

  • 基于Springboot吞吐量优化解决方案

    一.异步执行 实现方式二种: 1.使用异步注解@aysnc.启动类:添加@EnableAsync注解 2.JDK 8本身有一个非常好用的Future类--CompletableFuture @AllArgsConstructor public class AskThread implements Runnable{ private CompletableFuture<Integer> re = null; public void run() { int myRe = 0; try { myRe

  • 微信小程序基于高德地图API实现天气组件(动态效果)

    ​在社区翻腾了许久,没有找到合适的天气插件.迫不得已,只好借鉴互联网上的web项目,手动迁移到小程序中使用.现在分享到互联网社区中,帮助后续有需要的开发者. 1.组件介绍 1.1 组件效果预览图 ​小程序组件继承了外部样式colorui的色彩,但实际动画会根据父节点的color属性自动填充颜色,即使不引入colorui这个样式库,也可以在该组件引用外定义一个有color属性的块包裹该组件,同样可以达到如图的效果. 1.2 构造形式 1.3 支持的动画效果 简单介绍下,动画由3个部分组成 一个是主

  • 基于python win32setpixel api 实现计算机图形学相关操作(推荐)

    最近读研期间上了计算机可视化的课,老师也对计算机图形学的实现布置了相关的作业.虽然我没有系统地学过图形可视化的课,但是我之前逆向过一些游戏引擎,除了保护驱动之外,因为要做透视,接触过一些计算机图形学的基础常识.这次的作业主要分为2个主要模块,一个是实现画线,画圆的算法,还有填充的算法,以及裁剪的算法. 之前工作的时候虽然参与过一些数据可视化大屏的设计,但是当时主要的工作使用Echarts或者G2做业务组件开发,并没有对画线,填充,裁剪等基础算法做过实现.这次就着这个机会我就想了解一些.实现的效果

  • Spring MVC+FastJson+Swagger集成的完整实例教程

    基础部分 1. FastJson 简介 Fastjson是一个Java库,可用于将Java对象转换为JSON表示.它也可以被用来将一个JSON字符串转换成一个等效的Java对象.在转换速度上应该是最快的,几乎成为了项目的标配(在ajax请求和接口开发时一般都会用fastjson而不再使用jackson). GitHub: https://github.com/alibaba/fastjson (本地下载) 特性: 在服务器端和android客户端提供最佳性能 提供简单toJSONString()

随机推荐