我遇到了一个相当有趣的发音错误:
“不允许超过一个 JAX-RS 实体参数(所有其他参数必须使用 JAX-RS 资源参数注释之一进行注释)。”
我正在使用 enunciate 构建支持 XML 和 JSON 的 SOAP 和 REST API。Enunciate 配置为使用所有 service.* 和 service.impl.* 类。每个服务都包含用于发音文档的所有 Javadoc,以及一个 [@GET @POST @PUT @DELETE] 和一个 @Path 注释。每个服务实现都包含一个类 @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”注释时,发音会运行得很好。但是,评论其中任何一个都将失败并显示上述消息。问题是我的服务包含 2-8 个不同的模型(例如:我的 addressService 包含 3 个对象:地址、州和国家/地区),因此我指定了路径上下文(使用地址)如下:
在 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),但运气不佳。
有没有其他人看到这个问题?关于我可以做些什么来解决它的任何想法?我有一种感觉,这将是那些“没有”的修复之一……只是不能把我的手指放在它上面。
在此先感谢您的帮助。