Gle*_*eeb 15 rest spring jax-rs spring-mvc jersey
我想为同一个GET路径提供多个功能.
当且仅当查询参数与URL字符串中的参数匹配时,我希望我的Web服务"找到"这些函数.
例如:
我有 Path("/myGET")
对于那条路,我想有两个功能:
Run Code Online (Sandbox Code Playgroud)@GET @Produces(MediaType.APPLICATION_JSON) @TypeHint(TagSets.class) public Response getTagSets(@QueryParam("entityId") Integer entityId) { ... }
和
Run Code Online (Sandbox Code Playgroud)@GET @Produces(MediaType.APPLICATION_JSON) @TypeHint(TagSets.class) public Response getTagSets(){ ... }
现在我收到一个错误:
严重:已使用资源和/或提供程序类检测到以下错误和警告:严重:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer)和public javax.ws.rs.core.Response <...>.getTagSets(java.lang. Integer,java.lang.Integer)可以生成相同的媒体类型SEVERE:生成媒体类型冲突.资源方法public javax.ws.rs.core.Response <...>.getTagSets()和public javax.ws.rs.core.Response <...>.getTagSets(java.lang.Integer,java.lang .Integer)可以生成相同的媒体类型
首先:有没有办法实现我想做的事情..
第二:如果这是可用的,当且仅当查询参数与函数中请求的内容完全匹配时,是否有任何方式可以找到路径?例如,如果将调用相同的路径@QueryParam("differentParam"),它将不会到达任何2个函数.
第三:如果泽西没有办法做到这一点,有没有办法与其他框架工作一起做?
重要提示:回答这个问题的人认为我正在寻找一种解决方案而不是解决方案.今天我正在使用1个函数并检查参数并调用我需要的东西(这是我在发布问题之前使用的).但我正在寻找的可能是使用框架的力量来拯救我的麻烦
谢谢.
资源由它的path唯一定义,而不是由它的 params 定义。您定义的两个资源具有相同的路径。您可以为每个路径定义新路径,例如/myGet/entity, /myGet/, /myGet/differentParam; 或使用单个路径作为/myGet/并检查查询参数如下:
@GET
@Produces(MediaType.APPLICATION_JSON)
@TypeHint(TagSets.class)
public Response getTagSets(@Context HttpServletRequest request){
...
if (request.getParameterMap().isEmpty()) {
// then you have no query params, implement as there are no query params
} else {
String queryParam = request.getQueryString();
// check queryParam, and add another if else statements, implement
}
...
}
Run Code Online (Sandbox Code Playgroud)
小智 1
唯一的方法是如评论中所述。您可以使用一个方法来声明所有查询参数,然后根据值(存在或不存在)调用正确的方法。
(解决方法)如果您想要的只是向客户端公开具有多个查询参数的单个端点,并且代码实现并不重要,则可以使用拦截器。读取查询参数并修改 URI 以将其定向到正确的方法。
| 归档时间: |
|
| 查看次数: |
7665 次 |
| 最近记录: |