mime类型是什么类型_使用多种MIME类型测试REST
mime类型是什么类型
1.概述
本文将重点介绍测试具有多种媒体类型/表示形式的RESTful服务。 这是有关使用Spring和基于Java的配置的Spring Security设置安全的RESTful Web服务的系列文章的第十篇。
REST with Spring系列:
- 第1部分 – 使用Spring 3.1和基于Java的配置引导Web应用程序
- P艺术2 - 构建RESTful Web服务使用Spring 3.1和Java配置
- P艺术3 - 保护RESTful Web服务使用Spring Security 3.1
- 第4部分 – RESTful Web服务可发现性
- 第5部分 – 使用Spring进行REST服务发现
- 第6部分 – 使用Spring Security 3.1的RESTful服务的基本身份验证和摘要身份验证
- 第7部分 – Spring的REST分页
- 第8部分 – 使用Spring Security对RESTful服务进行身份验证
- 第9部分 – 带有Spring的REST的ETag
2.目标
任何RESTful服务都需要使用某种媒体类型将其资源作为表示形式公开,并且在许多情况下,还需要多个媒体类型。 客户端将设置Accept标头以选择其从服务中请求的表示形式。 由于资源可以具有多种表示形式,因此服务器将必须实现一种负责选择正确表示形式的机制-也称为内容协商。 因此,如果客户端请求application / xml ,那么它应该获得Resource的XML表示,如果客户端请求application / json ,那么应该获得JSON。
本文将说明如何编写能够在RESTful Service支持的多种表示形式之间切换的集成测试。 目标是能够使用完全相同的服务URI运行完全相同的测试,而只是要求使用不同的媒体类型。
3.测试基础架构
我们将从为编组人员定义一个简单的接口开始–这将是允许测试在不同媒体类型之间进行切换的主要抽象:
public interface IMarshaller {...String getMime();
}
然后,我们需要一种基于某种形式的外部配置来初始化正确的编组器的方法。 对于这种机制,我们将使用Spring FactoryBean来初始化编组器,并使用一个简单的属性来确定要使用的编组器:
@Component
@Profile('test')
public class TestMarshallerFactory implements FactoryBean<IMarshaller> {@Autowiredprivate Environment env;public IMarshaller getObject() {String testMime = env.getProperty('test.mime');if (testMime != null) {switch (testMime) {case 'json':return new JacksonMarshaller();case 'xml':return new XStreamMarshaller();default:throw new IllegalStateException();}}return new JacksonMarshaller();}public Class<IMarshaller> getObjectType() {return IMarshaller.class;}public boolean isSingleton() {return true;}
}
让我们来看一下:
- 首先,这里使用了Spring 3.1中引入的新的Environment抽象-有关更多信息,请查看带有Spring的属性文章。
- 从环境中检索test.mime属性 ,并用于确定要创建哪个封送处理程序-一些Java 7在这里使用String语法
- 接下来,如果根本没有定义该属性,则默认的marshaller将成为支持JSON的Jackson marshaller
- 最后–此BeanFactory仅在测试场景中处于活动状态,因为使用了Spring 3.1中引入的新@Profile支持
就是这样–该机制能够根据test.mime属性的值在编组器之间进行切换。
4. JSON和XML编组器
继续,我们将需要实际的marhsaller实施-每个受支持的媒体类型一个。
对于JSON,我们将使用Jackson作为基础库:
public class JacksonMarshaller implements IMarshaller {private ObjectMapper objectMapper;public JacksonMarshaller() {super();objectMapper = new ObjectMapper();}...@Overridepublic String getMime() {return MediaType.APPLICATION_JSON.toString();}
}
为了获得XML支持,编组人员使用XStream :
public class XStreamMarshaller implements IMarshaller {private XStream xstream;public XStreamMarshaller() {super();xstream = new XStream();}...public String getMime() {return MediaType.APPLICATION_XML.toString();}
}
请注意,这些编组器未定义为它们自己的Spring组件。 原因是它们将由TestMarshallerFactory引导到Spring上下文中,因此不需要直接使它们成为组件。
5.同时使用JSON和XML来使用服务
在这一点上,我们应该能够对已部署的RESTful服务进行全面的集成测试。 使用编组器很简单–将IMarshaller直接注入到测试中即可:
@ActiveProfiles({ 'test' })
public abstract class SomeRestLiveTest {@Autowiredprivate IMarshaller marshaller;// tests...
}
Spring将注入的确切编组器当然将取决于test.mime属性的值; 这可以从属性文件中获取,也可以直接在测试环境中手动设置。 但是,如果没有为此属性提供值,则TestMarshallerFactory将仅使用默认的编组器JSON编组器。
6. Maven和詹金斯
如果将Maven设置为针对已部署的RESTful服务运行集成测试,则可以这样运行:
mvn test -Dtest.mime=xml
或者,如果此构建使用Maven生命周期的集成测试阶段:
mvn integration-test -Dtest.mime=xml
有关如何使用这些阶段,以及如何建立一个Maven构建,使其应用程序预集成测试目标的部署约束,在集成测试目标,然后关运行集成测试的详细信息在post-integration-test中查看部署的服务,请参阅与Maven进行集成测试 。
使用Jenkins时 ,作业必须配置为:
This build is parameterized
并添加了String参数 : test.mime = xml 。
常见的Jenkins配置是必须针对已部署的服务运行运行同一组集成测试的作业-一个使用XML,另一个使用JSON表示。
7.结论
本文介绍了如何正确测试REST API。 大多数API的确会以多种表示形式发布其资源,因此测试所有这些表示形式至关重要,因此使用完全相同的测试非常酷。
要在实际的集成测试中全面验证这种机制,以验证所有资源的XML和JSON表示形式,请查看github项目 。
参考:来自baeldung博客的JCG合作伙伴 Eugen Paraschiv对具有多种MIME类型的REST进行了测试 。
翻译自: https://www.javacodegeeks.com/2013/01/testing-rest-with-multiple-mime-types.html
mime类型是什么类型
mime类型是什么类型_使用多种MIME类型测试REST相关推荐
- 无法发送具有此谓词类型的内容正文_采用多模态细化类型进行程序合成
引用 Polikarpova N, Kuraj I, Solar-Lezama A. Program synthesis from polymorphic refinement types[J]. A ...
- #未能找到类型或命名空间名称_如何变更文件类型为自己所需要的类型(通俗易懂快速上手)...
文件的类型分为很多,但是呢有时候这些类型的文件不是咱们想要的或者是所需的,那么需要我们的操作是变更文件类,下面我从三个点去分享下如何去做变更,这三个点分别是,a.显示文件名称后缀:b.单独变更文件类型 ...
- 使用多种MIME类型测试REST
1.概述 本文将重点介绍测试具有多种媒体类型/表示形式的RESTful服务. 这是关于使用Spring和基于Java的配置的Spring Security设置安全的RESTful Web Servic ...
- Qt (高仿Visio)流程图组件开发(三) 图元基类如何定义,流程图多种图元类型实现
文章目录 本系列目录 前言 一.图元基类的定义 1.图元信息基类结构体 2.图元位置 3.父子对象关系 二.自定义图元实现 1.自定义图元基类(FlowchartGraphicsItem)与Qt原生图 ...
- golang 获取struct类型_聊聊golang的类型断言
序 本文主要研究一下golang的类型断言 类型断言 x.(T) 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x为T类型 如果T类接口类型,则该断言x实现了T接口 实例1 func ma ...
- double类型怎么取余_数据类型和运算符
数据类型和运算符 1.进制 1.1文件存储单位 任何数据在计算机中都是以二进制的形式存在的,二进制早期由电信号开关演变而来 . 一个电信号或者一个二进制位统称为Bit位,8个Bit位为一组组成 ...
- C# 泛型多种参数类型与多重约束 示例
C# 泛型多种参数类型与多重约束 示例 interface IMyInterface { }class Dictionary<TKey, TVal>where TKey : ICompar ...
- 序列化包含多种不明类型的集合
序列化包含多种不明类型的集合 代码:/Files/zhuqil/Kirin.rar 导言: 你是否曾经想过序列化构造对象,它里面有一个集合,这个集合包含接口或者抽象类?你是否不知道所有的你要序列化的类 ...
- 文件选择器看这个就够了—轻量级、支持多种文件类型
一款轻量级的文件选择器,支持多种文件类型 本项目所使用的库为: Android-FilePicker PhotoView Glide 使用步骤: 第一步导入: compile 'com.vincent ...
最新文章
- 使用crontab自动化调度jupyter notebook定时运行
- easy-mock写的一个简单的模拟二页的反馈
- 抽象类,虚方法,接口
- vector作为参数传递到dll问题
- ZooKeeper、Eureka谁是最好的注册中心?
- 安卓逆向_8 --- Android 调试工具 DDMS 和 Monitor ( 去掉 车来了 app 的广告 )
- php 远程下载大文件,php下载远程文件(支持断点续传,支持超大文件)
- hive hql文档_大数据学习路线分享hive的运行方式
- Lesson Plan 教学计划 翻译
- 前端基础进阶之Promise
- win7与winxp双系统安装后的引导过程
- java进阶(1)之Euraka和Feign的结合使用
- Vimium、CrxMouse配置信息
- QGis二次开发:预览几何图形,QgsRubberBand的应用
- win10家庭版计算机登录名,怎样让Win10专业版/企业版/家庭版的登录界面显示用户名输入框...
- vue3—reactive如何更改属性
- python爬取12306_Python 爬取12306火车票
- win7家庭版和旗舰版区别_WIN7_64位系统安装 MicroWIN_SP9后没有PC-PPI通讯协议怎么处理?...
- shiro中登录的时候url地址栏带jsessionid的两种方式
- vue 基于 Export2Excel.js 导出 Excel