我遇到了一个相当有趣的发音错误:
“只允许一个JAX-RS实体参数(所有其他参数必须使用JAX-RS资源参数注释之一注释)。”
我正在使用enunciate构建SOAP和REST API,支持XML和JSON。 Enunciate配置为使用所有service。*和service.impl。*类。每个服务都包含用于enunciate文档的所有Javadoc,以及[@GET @POST @PUT @DELETE]和@Path注释。每个服务impl都包含一个类@Path注释。
示例界面:
public interface myService {
@GET
@Path("/something")
Object doGetAll();
@GET
@Path("/something/{id}"
Object doGetOne(@PathParam("id") Integer id);
@PUT
@Path("/something")
Object doCreate(/*params*/);
@POST
@Path("/something/{id}")
Object doUpdate(@PathParam("id") Integer id, /*params*/);
@DELETE
@Path("/something/{id}")
Object doDelete(@PathParam("id") Integer id);
}
示例实施:
@Path("/base")
public class myServiceImpl implements myService {
Object doGetAll() {/*stuff*/}
Object doGetOne(Integer id) {/*stuff*/}
Object doCreate(/*params*/) {/*stuff*/}
Object doUpdate(Integer id, /*params*/) {/*stuff*/}
Object doDelete(Integer id) {/*stuff*/}
}
当我在我的服务中注释掉“@POST”和“@PUT”注释时,enunciate将运行得很好。但是,重新评论将失败,并显示上述消息。问题是我的服务包含2-8个不同的模型(例如:我的addressService包含3个对象:地址,州和国家),所以我已经指定了路径上下文(使用地址),如下所示:
on impl:
@Path("/address")
public class myAddressServiceImpl implements myAddressService {}
关于方法:
@GET
@Path("/{id}")
findAddressById();
@GET
@Path("/states/{id}")
findStateById();
@GET
@Path("/countries/{id}")
findCountryById();
如果我能提供更多信息,我很乐意。这是一个相当令人沮丧的问题,因为我不确定我是否配置错误(令人怀疑,这是一个基本配置)或者我是否正在扩展JAX-RS可以做什么。我花了很多时间阅读教程,谷歌搜索并查看Javadoc(用于发音和JAX-RS),但没有太多运气。
还有其他人看过这个问题吗?我有什么想法可以解决它?我感觉这将成为那些“没有”修复之一......只是不能把手指放在它上面。
提前感谢您的帮助。
答案 0 :(得分:4)
“实体参数”是由REST请求正文指定的参数。换句话说,读取请求主体并尝试将其反序列化为参数类型的对象,然后调用请求。
由于只能有一个实体,因此只能有一个实体参数。
其他参数必须使用@QueryParameter,@ PathParameter等进行注释。
所以这个错误消息真正试图说的是“对于所有使用@POST和@PUT注释的方法,你只能有一个没有注释某些注释的参数。所有其他参数都需要有一个参数注释“。