博客

我已经有一段时间没有做任何更新了,我想让社区知道我在8.1.4中所做的工作。目前在快照版本中是一个全新的RestClient API!

旧的RestClient API有点像服务器端API的第二类公民一样自然增长。因此,它没有经过很好的测试,也没有充分利用现有的Apache HttpClient API。我经常发现错误和功能经常与HttpClient中已经存在的内容重复。

新API包含与旧API相同的所有功能,但具有以下优点:

  • 直接从Apache HttpComponents和Apache HTTP Client API进行扩展,而不仅仅是使用它们。
  • 编写API是为了方便扩展。
  • 向HTTP调用添加流畅的编码,包括易于使用的流畅断言。
  • 增加了对多种并发语言的支持(包括通用语言支持)。
  • 几乎100%的单元测试。

下面是一个从客户端创建到HTTP请求和处理的流畅调用示例:

构建支持多种语言的客户端现在非常简单:

可以通过方便的构建器方法轻松配置分析器和序列化器,如下所示:

HTTP部件(标头、查询/表单数据参数)现在支持通过供应商动态更改值:

所有HTTP部件都使用简单的请求语法提供了对OpenAPI部件模式序列化的完全支持:

…和回应:

现在可以多次处理响应正文:

结合新的强大断言API,您可以轻松执行复杂的流畅调用:

例如,甚至可以执行涉及解析和序列化的复杂断言:

新API仍然支持远程代理接口(但添加了一些新功能):

日志记录和调试已简化:

…生成以下控制台输出:

RestClient类直接从Apache HttpClient扩展,因此继承了相同的功能。构建器类上提供了Fluent setter,以便轻松使用这些现有功能:

RestClient类(和其他类)也可以扩展,以提供所需的任何类型的自定义:

此外,两个单独的MockRest(用于服务器端测试)和MockRemote(用于远程接口测试)已被一个直接从RestClient扩展的MockRestClient类所取代,该类允许您充分利用新断言API作为单元测试的一部分:

MockRestClient类还可以包装实例化的bean,这在使用Spring Boot部署REST servlet时特别有用:

下面显示了如何使用新的统一API测试远程接口:

有关更多信息,请参阅更新的Javadocs:




8.0.1中添加了一种简化的方法,用于使用注释自定义REST接口中的序列化程序和解析器。

下面的示例显示了使用泛型的旧方法@RestResource(属性)注释,以及使用专用注释的新方法:

为所有序列化程序和解析器提供注释:

特征:

  • 注释可以应用于类和方法。
  • 注释也可以应用于父类和方法,并且可以组合和重写,以父子顺序应用。
  • 所有注释都支持SVL变量(例如“$C{myConfigVar}”)。
  • 所有注释的默认值都可以设置为系统属性。
  • 也可以在主配置文件或application.properties文件中设置所有注释的默认值。
  • 注释可以直接使用new应用于序列化程序和解析器应用批注(类)applyAnnotations(方法)在序列化器和解析器生成器以及组生成器类上定义。


刚刚添加了对配置文件中导入语句的支持:

这仍然是一项以工作为目的的进步。最困难的方面是正确处理导入配置中所做更改的侦听器事件,包括动态添加或删除导入语句引起的更改。我仍然不确定是否已经正确地解决了所有并发问题,还有更多测试要做。  

更多信息可以在文档中找到:

http://juneau.apache.org/site/apidocs-8.0.1/overview-summary.html#juneau-配置。进口

源javadoc标记

我添加了一个Javadoc标记,用于快速链接到GitHub上的源代码:“{@source}“或”{@源标签}"

它可以添加到类级javadoc中,如下所示:

根据源树中的文件位置,它将计算GitHub链接:

我认为,如果您想在示例代码javadocs中提供源代码链接,这将特别有用。

Spring Boot集成

大家好,

我对Marcelo为Spring Boot集成所做的工作做了一些修改。尽管如此,我仍在不断考虑这一点,欢迎提出建议。

以下是更新的项目布局:

以下是使用Juneau示例REST资源启动Spring应用程序的情况:

另一个选项是在配置bean方法上添加@JuneauRest注释:

根资源将使用初始化SpringRestResourceResolver软件它允许将子资源定义为可注入Springbean。

可以使用juneau-examples-rest-springboot.launch文件。它将在端口5000上显示REST示例。


在8.0中,我将添加默认系统配置的概念。设置Juneau REST资源以使用Spring Boot的一个烦恼是,您必须手动设置“Juneau.configFile”系统属性,以便我们的servlet知道在哪里查找配置。使用默认的系统配置,这一要求就消失了。

添加的是一个返回系统默认配置的Config.getSystemDefault()静态方法。

如果设置了“juneau.configFile”,它将继续在主目录或类路径中查找具有该名称的配置文件。如果没有,则将查找以下内容:

  • 在主目录中:
    • <jar-name>.cfg
    • JVM主目录中以.cfg结尾的任何文件。
  • 在类路径中(作为jar的一部分):
    • <jar-name>.cfg
    • 朱诺.cfg
    • 默认.cfg

请注意,通过将其放在jar中,您可以将所有内容打包为单个uber-jar,但会失去持久性(因为它不可写)。

还将添加:

  • ConfigClasspathStore—用于从上下文类路径读取配置的ConfigStore。请注意,这是一个只读存储。
  • exists(name)-接口上用于检查配置是否存在的新方法。

REST servlet可以使用特殊关键字“system_default”引用系统默认配置。

例如:

//始终使用系统默认值
@RestResource(配置=“SYSTEM_DEFAULT”)
//如果已设置,则使用系统属性;如果未设置,则为系统默认值。
@RestResource(配置=“$S{juneau.configFile,SYSTEM_DEFAULT}”)


有一个对应的Config.setSystemDefault(Config)用于覆盖系统默认配置。   

宠物商店应用程序已升级为使用JPA进行持久化。现在可以使用Juneau序列化器和解析器编组JPABean。

例如,下面的Petbean组合了JPA和Juneau注释:

一个值得注意的增强是,您现在可以像JPA注释一样,在私有bean字段上定义bean-property注释(例如@BeanProperty、@Html、@Schema…)。

此外,@Schema注释也得到了增强,可以为自动生成的Swagger中的bean属性提供更多信息:

朱诺7.2.1的新功能:

方法和参数注释(如@RestMethod、@Path等)现在可以从父类和接口继承。  

这意味着您现在可以为服务器端和客户端API定义相同的Java接口。  

例如,宠物商店应用程序现在定义了一个顶级宠物商店接口:

这个PetStore资源类使用普通的RestServlet API实现此接口。

在这种特殊情况下,@RestMethod注释是在实现类中指定的,尽管它们也可以位于接口中。

这个宠物商店接口可以用作远程代理接口,如下所示:

这种设计方法的优点是:

  • 保持服务器端和客户端API同步要容易得多,因为它们使用相同的接口。
  • 注释可以移动到您的界面中,在那里它们不会影响servlet代码的可读性。


正在对上的默认值进行行为更改@RestMethod(路径)。如果未指定,则现在将从Java方法名称推断该值。

这可以产生外观更整洁的代码。

之前的行为是默认为值"/*".

有关更多信息,请访问:

http://juneau.apache.org/site/apidocs_preview/overview-summary.html#juneau-rest-server。RestMethod(重置方法)

文档重新组织

仅供参考。。。。我已经把概述.html文件到各个主题:

概述文档变得太笨拙了(Eclipse HTML编辑器很难处理它)。较小的部分应该更容易使用,而重新组织页面现在应该更容易。此外,断开的链接现在应该更少了。

The 文档生成器类将获取所有单独的页面并将它们合并到同一个页面中概述.html页面。

生成器当前不是构建过程的一部分,因此必须手动执行它才能生成概述。   

在7.2中,我们将引入Swagger注释的自动验证。这意味着,各种Swager注释不仅用于填充Swager JSON/UI,还积极用于序列化/解析/验证HTTP部分。

例如:

此示例显示类型为的参数宠物状态[](这碰巧是枚举,但也可以是POJO)。  The 类型集合格式属性告诉框架将传入值解析为逗号分隔的列表。  The _枚举显示了可能的有效值。A类错误请求如果有任何值不匹配,则抛出。  

此更改的一部分包括将客户端和服务器端注释组合为一组注释(不再混淆org.apache.juneau.remoteable网站。查询带有org.apache.juneau.rest.annotation网站。查询).

功能包括:

  • 支持所有Swagger 2.0。
  • 自动验证:
    • 数值(最低限度最大限度排除最小值排除最大值倍数Of).
    • 字符串值(最小长度最大长度枚举).
    • 集合值(项目最小项目数maxItems(最大项目数)唯一项目).
    • 对象值(属性最大属性最小属性附加属性).
    • 价值观的存在(必修的allowEmptyValue(允许空值)).
  • 同时支持客户端和服务器端注释。
  • 在上的工作车身注释。如果正文的媒体类型与现有的序列化程序/解析器不匹配,则使用Swagger规则进行编组。
  • 仍然支持UON表示法,因此您仍然可以将任意POJO表示为任何HTTP部分。但是,您必须明确指定format=“uon”.

Juneau 7.2.0即将发布,但仍有大量文档需要编写。类本身上的Javadoc应该基本上是完整的,但在概述文档中还有很多内容要写。

到目前为止,我已经在这里上传了Javadocs的预览:
http://juneau.apache.org/site/apidocs_preview/index.html

为了帮助识别新的和正在进行的文档,我在新的和修改的部分中添加了临时颜色编码。。。

如果缺少任何文档,现在是指出它的好时机(笑)

在7.2.0中,我添加了对不包括Accept和Media-Type头的POJO REST请求的支持。

以前,如果您的请求不包含Accept或Content-Type标头,则必须使用Readers和Writers来处理HTTP请求和响应正文。否则,您将得到不可接受(406)和不支持的媒体类型(415)响应代码。  

这种行为现在正在放松。如果您的请求不包含media-type头,那么您仍然可以将POJO用于请求和响应。

例如,这是Body注释上Javadoc的一个片段,描述了可以在REST Java方法中用于表示请求主体的对象类型:

JUnit测试结果

你好。。。。JUnit测试用例结果已添加到Jenkins构建中。。。