我有一个像这样的通用Java类型:
class Response<D> {
List<D> data;
}
并希望创建类似于RAML 1.0的东西(我是新手)。
我的第一个方法是
types:
Response:
type: object
properties:
data: object[]
并在使用时
body:
type: Response
properties:
data: MyDataType[]
从API-Workbench我总是得到一个&#34;非法覆盖从Response&#34;继承的属性数据。
另一个想法是使用repeat
:
types:
Response:
type: object
properties:
data: object
repeat: true
和
body:
type: Response
properties:
data: MyDataType
repeat: true
现在非法覆盖已经消失,但在API-Console中,我现在得到一个&#34; Uncaught TypeError&#34;。
如何解决?或者我需要一种完全不同的方法?有什么想法吗?
答案 0 :(得分:2)
据我了解,Response
正在抽象不同类型的数据,但格式相似。一种方法是使用resourceTypes
抽象响应中的相似性,并在types
中定义具体数据。
#%RAML 1.0
title: New API
version: v1
baseUri: http://api.samplehost.com
mediaType: application/json
types:
User:
usage: A user in the system
properties:
firstname:
required: true
lastname:
required: true
ArticleId:
usage: An id of any article in the system
type: number
Article:
usage: Pattern for any article in the system
properties:
id:
type: ArticleId
required: true
created:
type: date
required: true
#######################################
# the following captures the similarity:
#######################################
resourceTypes:
collection:
get:
responses:
200:
body:
properties:
data: <<typename>>[]
###############
# API:
###############
/user:
description: All the users
type:
collection:
typename: User
/article:
description: All the articles
type:
collection:
typename: Article
答案 1 :(得分:1)
我在解决此问题时看到以下选项:
List<MyDataType>
,并修改生成的输出。例如。使用与第1点相同的raml-java-parser。type{}
地图/字典”或外部类型可能需要包含的事实。也许this answer link有助于此代表。20分钟前我对RAML一无所知,所以不要把它当作一个完整的答案而是快速猜测。
答案 2 :(得分:0)
你说“当使用它时”: 身体: 类型:响应 特性: data:MyDataType []
您已经在上面定义了“响应”类型,将“data”属性设置为“object []”。 “MyDataType”来自哪里?只需删除“属性”,只需“输入:响应。然后错误就会消失。” 也许您希望您的响应类型具有“任何[]”。我不知道你要做什么。也许定义另一种继承你的Response类型的类型。