cxf-rs 和 swagger 的点-程序员宅基地

技术标签: ui  json  数据库  

1. 从web.xml 说起

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

如果这样配置,所有的请求都走CXF(意思是作为一种资源进行请求) ,就无法访问 swagger UI ,所以不能配置成/* 

应该如下配置:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <display-name>JAX-RS Simple Service</display-name>
    <description>JAX-RS Simple Service</description>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>

这样做{协议}{host}{port}{项目}{资源}

补充welcome files:http://docs.oracle.com/javaee/5/tutorial/doc/bnaeo.html#bnaer

The welcome files mechanism allows you to specify a list of files that the web container will use for appending to a request for a URL (called a valid partial request) that is not mapped to a web component.

例如:访问 http://localhost:8080/cxf-rs/

则会自动访问webapp 下的 index.XXX

2. swagger UI

You can use the swagger-ui code AS-IS! (原样)

把`dist` folder 下的文件copy 到 webapp下 

或者(如果觉得乱)copy到webapp下的指定文件夹下 例如:webapp/swagger

maven 的 webapp 最终生成war包后,不存在webapp ,项目目录即是webapp 

一般来看如下:

出于安全考虑,非静态资源应该放在WEB-INF 里面。

如果想要实现以上效果,需要:

①配置welcome file 并将`dist` 中 index.html 的资源相对路径(src or href)修改为 swagger/..........

②配置welcome list

    <welcome-file-list>
        <welcome-file>swagger/index.html</welcome-file>
    </welcome-file-list>

然后访问 http://localhost:8080/cxf-rs/

又出现了 swagger ui  页面

如果想要修改为 index.jsp 需要执行以下操作:

①新建一个jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Swagger UI JSP</title>

②将welcome list 修改为 swagger/index.jsp

3. web service 与 web project

被CXF 拦截的 url 是作为RESTful 资源访问,一般返回JSON

非CXF拦截的url是访问webapp 资源,页面跳转

这两种访问必须分清楚。

4.swagger 配置

https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-RESTEasy-2.X-Project-Setup-1.5

spring 方式

    <bean id="swaggerConfig" class="io.swagger.jaxrs.config.BeanConfig">
        <property name="resourcePackage" value="cn.zno.resource" />
        <property name="version" value="1.0.0" />
        <property name="host" value="localhost:8080/cxf-rs" />
        <property name="basePath" value="/api" />
        <property name="title" value="Swagger Petstore" />
        <property name="description" value="This is a app." />
        <property name="contact" value="[email protected]" />
        <property name="license" value="Apache 2.0" />
        <property name="licenseUrl" value="http://www.apache.org/licenses/LICENSE-2.0.html" />
        <property name="scan" value="true" />
    </bean>

 重要属性:

resourcePackage :JAX-RS 的资源包

host:访问文档地址

basePath :所有的资源url pattern 再追加,例如:某个java类中的资源@Path("/user") ,则这个资源最终是 api/user

其他属性:

title:这组api标题

contact:联系方式

前置:

    <!-- /* -->
    <!-- * resource -->
    <!-- * / -->
    <bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" />

    <!-- /* -->
    <!-- * provider -->
    <!-- * / -->
    <bean id="swaggerWriter" class="io.swagger.jaxrs.listing.SwaggerSerializers" />

第一个是接收url请求( swagger.json / swagger.yaml ) 

第二个是将 swagger object 打印输出 ,交由swagger ui 展示

转载于:https://www.cnblogs.com/zno2/p/5553319.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30770783/article/details/96264607

智能推荐

设置对话框显示位置_帆软弹窗只能在中间吗-程序员宅基地

文章浏览阅读1.8k次。原文地址:http://blog.sina.com.cn/s/blog_455245fc01000a43.html今天想写个程序,需要对话框在屏幕的右下角。懒得想就去网上搜搜,不过却没找到什么好的。大部分都是给个函数MoveWindow,或者SetWindowPos却不给大家写用法。比如怎么的到对话框的大小等等!反正就是不方便向我一样新手学习。 所以我今天就献丑了,把这写出来。虽然没..._帆软弹窗只能在中间吗

判断素数(C++版)_c++判断素数-程序员宅基地

文章浏览阅读4.1w次,点赞29次,收藏69次。参考博文:https://blog.csdn.net/Jonms/article/details/804646221.简单粗暴法对于判断一个数n是否为素数,按素数的定义,试除以从2开始到m-1的整数,如果都不能整除,则该数一定是素数。#include <iostream>#include <algorithm>using namespace std;bool ..._c++判断素数

解决关于Git无法提交 index.lock File exists的问题-程序员宅基地

文章浏览阅读6.5k次,点赞5次,收藏6次。解决关于Git无法提交 index.lock File exists的问题问题今天提交代码时,在一次提交,莫名其妙没成功后,再次用git commit -a命令时,出现以下错误,无论是用git还是TortoiseGit等其他客户端都会出现以下这个问题。。错误日志 $ git commit -a fatal: Unable to create ‘XXXXXX/.git/index.lock..._d:/sdnyspringcloudcode/procurementcloud_sdny/.git/index.lock': file exists.

[状压dp] 小国王(状压dp+下标映射技巧)-程序员宅基地

文章浏览阅读284次。文章目录0. 前言1. 状压dp+棋盘式(基于连通性)0. 前言相关:[状压dp] 蒙德里安的梦想(模板题+状压dp)1. 状压dp+棋盘式(基于连通性)1064. 小国王思路:状压 dp,个人认为状态定义比较麻烦。剩下的就是简单的位运算。尤其是最后一步的优化,是真的秀…代码:#include <iostream>#include <algorithm>#include <cstring>#include <vector>

Vuex的状态管理_vuex中state changeorigin:true-程序员宅基地

文章浏览阅读166次。1,什么是VuexVuex是一个专为Vue.js设计的状态管理模式它采用集中式存储管理应用的所有组件状态解决了组件之间同一状态的共享问题。但它繁琐冗余并不适合简单的小应用。2,Vuex的使用1、src目录下面新建一个vuex的文件夹2、vuex 文件夹里面新建一个store.js3、安装vuexcnpm install vuex --save4、在刚才创建的store.js引入vue 引入vuex 并且use vueximport Vue from 'vue' import Vuex _vuex中state changeorigin:true

【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置, 最后m个数变成最前面的m个数_java编程有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.-程序员宅基地

文章浏览阅读2.2k次。/* 2017年3月10日09:59:54 java基础50道经典练习题 例36 Athor: ZJY Purpose: 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置, 最后m个数变成最前面的m个数*/import java.util.Scanner;public class ProgramNo36_1{ public static void m_java编程有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.

随便推点

js获取视频缩略图-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏2次。原理:播放视频,canvas截图,base64转文件播放视频:input file选择文件,video播放视频 &lt;video :src="file.src" id="video" controls="controls" style="width:100%;max-height:400px;"&gt; &lt;/video&gt;截图_js获取视频缩略图

cache缓存_cachebuilder.newbuilder()-程序员宅基地

文章浏览阅读591次。一、使用CacheBuilder.newBuilder() .方法包:package com.google.common.cachemaven依赖:<dependency><groupId>com.geogle.guava</groupId><artifactId>guava</artifactId><version>11.0.2</version>..._cachebuilder.newbuilder()

跨交换机VLAN配置和验证_*跨交换机配置vlan的目的是什么,步骤和命令是什么?-程序员宅基地

文章浏览阅读1.5k次。实验配置拓扑1:配主机IP地址2:在交换机1和2上创建vlan10,vlan20,把相应拓扑图示端口加入vlan中SW1配置:使用show vlan命令查看端口是否加入vlan中SW2配置:SW3配置:此时交换机划分vlan,但交换机之间没有打trunk模式,测试此时pc能否联通。3:对交换机打上trunk模式交换机3在f0/1-2两个接口先进行封装协议,再打trunk此时发现pc端相同vlan间能够ping通。配置步骤:创建vlan划分端口设置交换机之间t_*跨交换机配置vlan的目的是什么,步骤和命令是什么?

python+opencv进行表格识别并写入excel中_opencv 提取图像中的excel-程序员宅基地

文章浏览阅读2.9k次,点赞7次,收藏30次。效果图如下:对于任意图标都不需要自定义模板,直接程序生成,不过需要注意,图中的表格必须是水平的,无法适配倾斜的表格。直接上代码:import cv2import numpy as npimport mathimport xlwtsrc='图片路径'raw = cv2.imread(src, 1)# 灰度图片gray = cv2.cvtColor(raw, cv2.COLOR_BGR2GRAY)binary = cv2.adaptiveThreshold(~gray, 255, c_opencv 提取图像中的excel

Android LinearLayout 各布局属性总结_linearlayout的divider和showdividers属性-程序员宅基地

文章浏览阅读7.2k次,点赞3次,收藏9次。LinearLayout是开发中使用率很高的控件,大部分开发人员感觉应该是很熟悉了,不过LinearLayout还有如下几个需要注意的地方,深刻了解以下几点可以让我们更加全面地认识LinearLayout的真正功能,避免开发中不自觉的踩坑。 一、当父控件orientation为vertical时,只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left、right、center_h..._linearlayout的divider和showdividers属性

mean与mean2_mean 和 mean2-程序员宅基地

文章浏览阅读2k次。mean与mean2 mean:计算一个行向量或列向量的平均值.例:X=[1 2 3; 2 3 4]; b= mean(X)与b=mean(X,1)相同,结果为[1.5 2.5 3.5]; b=mean(X,2),结果为 [ 2; 3] mean2:计算矩阵元素的平均值例:b=mean2(A)_mean 和 mean2

推荐文章

热门文章

相关标签