Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使Swagger生成工具(由其生成的Java类)生成服务器期望的自定义JSON_Java_Json_Yaml_Swagger_Openapi - Fatal编程技术网

使Swagger生成工具(由其生成的Java类)生成服务器期望的自定义JSON

使Swagger生成工具(由其生成的Java类)生成服务器期望的自定义JSON,java,json,yaml,swagger,openapi,Java,Json,Yaml,Swagger,Openapi,我正在使用一个由服务器提供的yaml创建的自鸣得意的Java客户端调用REST服务 服务器为服务提供的yaml说明如下: swagger:'2.0' 信息: 版本:1.0.0 标题:地理服务器工作区 描述:工作区是一组数据存储。与名称空间类似,它用于对以某种方式相关的数据进行分组。 联系人: 名称:地理服务器 电子邮件:'geoserver-users@sourceforge.net' 网址:'http://geoserver.org/comm/' 主机:本地主机:8080 基本路径:/geos

我正在使用一个由服务器提供的
yaml
创建的自鸣得意的Java客户端调用REST服务

服务器为服务提供的
yaml
说明如下:

swagger:'2.0'
信息:
版本:1.0.0
标题:地理服务器工作区
描述:工作区是一组数据存储。与名称空间类似,它用于对以某种方式相关的数据进行分组。
联系人:
名称:地理服务器
电子邮件:'geoserver-users@sourceforge.net'
网址:'http://geoserver.org/comm/'
主机:本地主机:8080
基本路径:/geoserver/rest
证券定义:
基本:
类型:基本型
描述:HTTP基本身份验证。
post:
操作ID:PostWorkspace
标签:
-“工作区”
摘要:将新工作区添加到GeoServer
描述:将新工作区添加到服务器
安全:
-基本:[]
参数:
-名称:workspaceBody
说明:要上载的图层组主体信息。
在:身体
必填项:true
模式:
$ref:“#/definitions/Workspace”
-名称:默认值
in:查询
描述:新工作区将用作默认工作区。允许的值为true或false,默认值为false。
必填项:false
类型:布尔型
默认值:false
消耗:
-应用程序/json
-应用程序/xml
生产:
-文本/html
-应用程序/json
-应用程序/xml
响应:
201:
描述:已创建
模式:
类型:字符串
标题:
地点:
描述:可以在其中找到新创建的工作区的URL
类型:字符串
401:
说明:无法添加工作区,因为它已存在
定义:
工作空间:
标题:工作空间
xml:
名称:工作区
类型:对象
特性:
姓名:
类型:字符串
描述:工作区的名称
Swagger生成器从中创建易于使用的简单类:

Workspace=newworkspace();
workspace.setName(“测试”);
WorkspacesApi WorkspacesApi=新的WorkspacesApi(apiClient());//apiClient():身份验证
字符串响应=workspacesApi.postWorkspaces(workspace,true);
但它在调用时生成的内容JSON使服务器失败:
{name:'test'}

我发现服务器需要一个自定义JSON:
{workspace:{name:'test'}}

而招摇过市的一代也不会对自己的意愿做出回应:
yaml
包含了一个
xml:
属性,而该属性不是它的一部分。该工具不知道如何处理它并忽略它

定义:
工作空间:
标题:工作空间
xml:
名称:工作区
类型:对象
特性:
姓名:
类型:字符串
描述:工作区的名称
我是否有办法在
yaml
中输入一些指令来创建服务器正在寻找的自定义JSON,
将当前生成的
{name:'test'}
招摇过市生成工具更改为
{workspace:{name:'test'}


或者我必须添加一些插件或要求Swagger生成工具覆盖生成的类(以及如何生成?),以生成目标自定义JSON?

对于开发人员来说,
toString()
方法提供的内容是一些方便的功能。它不一定生成对象的有效JSON表示。应该使用JSON序列化程序将JAVA对象序列化为JSON字符串。例如,这可以在库的帮助下完成。

实际上,“xml”是Swagger 2.0(请参阅)的一部分,在使用xml表示时允许对模型进行细粒度控制

但是,您使用的是JSON,因此由生成的Swagger客户端生成的JSON负载非常好,并且应该被服务器接受

这将为您带来两个选项:

a) 通过接受有效负载(100%符合API规范)修复服务器

b) 编写一个定制客户端,将定制的JSON负载发送到服务器。生成的Swagger客户端不能以这种方式进行自定义。

@eidottermihi
默认情况下,Swagger客户端在生成客户端类时接受
JSON
内容。
如果我将其
消费:
声明仅更改为
应用程序/xml
,则在运行时,客户端将抱怨它没有准备好
xml
的处理程序

问题就是你说的那个。编写
yaml
文件的人编写该文件是为了生成
Swagger UI
文档,但他们是手动完成的,
yaml

  • 不是从服务器类自动创建的
  • 或者它不产生服务器实现的基本接口
这是一个
yaml
写在一边的,一个“我们相信我们的REST服务就是这些。”。但是没有保证,没有证据

因此,由于无法生成一个正确的客户端来调用它假装表示的REST服务,所以它毫无用处


我的问题有一个答案:

我能够为方法
postWorkspace
生成良好的JSON请求,方法是将
$ref:“#/definitions/Workspace”
更改为
$ref:“#/definitions/WorkspaceRequest”
,我声明:

post:
操作ID:PostWorkspace
标签:
-“工作区”
摘要:将新工作区添加到GeoServer
描述:将新工作区添加到服务器
安全:
-基本:[]
参数:
-名称:workspaceBody
描述:图层gro