Web Services JAX-RS子资源@PathParam值与java方法及其封闭java类型的任何@Path注解模板参数都不匹配

dly7yett  于 2022-11-15  发布在  Java
关注(0)|答案(4)|浏览(145)

我有一个类作为子资源,运行时,除了eclipse显示红色下划线外,所有东西都正常工作,没有任何错误,我如何才能使eclipse“知道”parent @Path是它的一部分。
例如x1c 0d1x
在消息资源中

@Path("/{messageId}/comments")
    public CommentResource getCommentResource() {
        return new CommentResource();
    }

和注解资源中

@Path("/") // optional for subresources
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
public class CommentResource {

    private CommentService commentService = new CommentService();

    @GET
    public List<Comment> getAllComments(@PathParam("messageId") long messageId) {
        return commentService.getAllComments(messageId);
    }

    @POST
    public Comment addMessage(@PathParam("messageId") long messageId,
            Comment comment) {
        return commentService.addComment(messageId, comment);
    }

    @PUT
    @Path("/{commentId}")
    public Comment updateMessage(@PathParam("messageId") long messageId,
            @PathParam("commentId") long commentId, Comment comment) {
        comment.setId(commentId);
        return commentService.updateComment(messageId, comment);

    }


    @GET
    @Path("/{commentId}")
    public String test2(@PathParam("messageId") long messageId,
            @PathParam("commentId") long commentId) { // messageId still gets
                                                        // passed from parent
                                                        // resource
        return "Method return commment id: " + commentId + " and messageId: "
                + messageId;
    }

    @DELETE
    @Path("/{commentId}")
    public void deleteComment(@PathParam("messageId") long messageId,
            @PathParam("commentId") long commentId) {

        commentService.removeComment(messageId, commentId);

    }

}

所有的messageId路径参数都带有红色下划线,表示错误,但一切都运行良好,看到这些很烦人,我不希望任何人看到我的代码后会抓狂。
谢谢

ih99xse1

ih99xse11#

我遇到了同样的问题,但我通过转到“首选项”-〉“JAX-RS”-〉“JAX-RS验证器”-〉“JAX-RS资源方法”解决了该问题,并将“Unbound @PathParam”注解值作为警告选中或忽略(默认为error)。如果忽略,您将不再看到该消息。从我所读到的内容来看,可能与JAX-RS验证有关。我使用的是JAX-RS 1。1与Jersey 1.19(不确定在JAX-RS 2.0中是否会有相同的行为)。

dz6r00yl

dz6r00yl2#

根据我的经验,Eclipse/JBoss Developer Studio中的JAX-RS验证在同一个注入类中包含多个带注解的HTTP方法函数时会出现问题。例如,单个@GET方法不会触发警报,但添加@POST方法会使验证器无法准确检测各种@PathParam和@Path语句之间的绑定。
这很烦人,但不会对代码编译或执行产生负面影响。
正如Corina所解释的,唯一真实的的选择是编辑IDE首选项来降级异常的严重性,我选择“警告”而不是“忽略”,这样就不会完全抑制任何合法的错误。

hkmswyz6

hkmswyz63#

我遇到这种问题是因为我对我的@PathParam使用了错误的导入javax.websocket.server.PathParam;。我的API测试成功了,但是JAXRS不满意。使用javax.ws.rs.PathParam;可以解决这个问题。

gijlo24d

gijlo24d4#

您需要将PathParam放在@Path()中,用{ } Package
就像这样
@POST @Path(“/主题可用性/{idTopic}”)公共响应将用户添加到主题可用性列表(@HeaderParam(“标记”)字符串标记,@PathParam(“idTopic”)int idTopic)

相关问题