Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java J2EE中的Restful服务配置不工作_Java_Rest - Fatal编程技术网

Java J2EE中的Restful服务配置不工作

Java J2EE中的Restful服务配置不工作,java,rest,Java,Rest,我正在使用servlets3和jsp处理j2EE项目,并使用restful服务交付应用程序数据。因此,我使用以下依赖项在pom.xml中获取restful服务 <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.2.1.GA</version&g

我正在使用servlets3和jsp处理j2EE项目,并使用restful服务交付应用程序数据。因此,我使用以下依赖项在pom.xml中获取restful服务

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>2.2.1.GA</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>2.2.1.GA</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>2.2.0.GA</version>
</dependency>
MyCommonServices.Java的路径为/,这意味着什么都没有,可以通过
localhost:8080/myapp/访问它。

@Path(value = "/mobapi")
public class MyAppServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/")
public class MyCommonServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/api")
public class MyAddonServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
Java的路径是/api,可以通过
localhost:8080/myapp/api/访问它。

@Path(value = "/mobapi")
public class MyAppServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/")
public class MyCommonServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/api")
public class MyAddonServices {

    @GET
    @Path(value = "/app/{param}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
问题是我只能访问
localhost:8080/myapp/app/6546
,没有问题

但是,我无法访问其他api,例如
localhost:8080/myapp/api/app/6546
localhost:8080/myapp/mobapi/app/6546

这里是否缺少其他配置,请找人帮忙

更新 我使用过滤器来处理映射请求,如
localhost:8080/myApp/app/something
localhost:8080/myApp/f/app/something
,如下所示

MyFilter.java

@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {
            String path = ((HttpServletRequest) request).getServletPath();
            boolean isGet = "GET".equals(((HttpServletRequest) request)
                    .getMethod());
            String newPath = null;
            ((HttpServletRequest) request).getQueryString();

            try {
                ((HttpServletRequest) request).getQueryString();
                if (path.contains("api/")) {
                    newPath = "f"
                            + path
                            + "?"
                            + ((HttpServletRequest) request)
                                    .getQueryString();
                }else {
                    newPath = "f"
                            + path
                            + "?"
                            + ((HttpServletRequest) request)
                                    .getQueryString();
                }
            } catch (Exception e) {
                newPath = "f" + path;

            }
            request.getRequestDispatcher(newPath).forward(request, response);
            return;
        }
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}
如果我删除此筛选器,我可以访问所有api,而不会出现问题,例如,
localhost:8080/myApp/f/app/something
&localhost:8080/myApp/f/api/app/something
&localhost:8080/myApp/f/mobapi/app/something

有人能帮上忙吗?

试着这样做:

MyCommonServices.Java

@Path(value = "/app/{param}")
public class MyCommonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/mobapi/app/{param}")
public class MyAppServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/api/app/{param}")
public class MyAddonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
Java

@Path(value = "/app/{param}")
public class MyCommonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/mobapi/app/{param}")
public class MyAppServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/api/app/{param}")
public class MyAddonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
Java

@Path(value = "/app/{param}")
public class MyCommonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/mobapi/app/{param}")
public class MyAppServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}
@Path(value = "/api/app/{param}")
public class MyAddonServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMsg(@PathParam(value = "param") String appId) {
        String token = documentDAO.mobileAppToken(appId);
        return Response.status(200).entity(token).build();
    }
}

如果您将MyCommonServices从
@Path(value=“/”)
更改为
@Path(value=“/app”)
@Path(value=“/app/{param}”)
更改为
@Path(value=“/{param}”)

谢谢,但我在这些类中还有其他方法。我认为问题在于
@Path(value=“/”)
MyCommonServices.Java您是否可以更改为
@Path(value=“/comm”)
并检查其他路径是否有效。您是否可以检查尝试访问此url时返回的响应?要执行此操作,只需在浏览器上按F12并检查网络流量。另外,我想知道您使用的是哪个j2ee服务器以及哪个版本。对不起,问题出在我的过滤器上。我更新了我的问题。你能调查一下吗?嗯,我不明白你的过滤器的用途:/是的,改变了它,但现在它也不能与其他人一起工作。对不起,问题是我的过滤器。我更新了我的问题。你能调查一下吗?
catch(例外e){newPath=“f”+path;}
你甚至没有记录任何问题。从日志记录+抛出任何异常开始,然后尝试执行任何其他操作。您运行的是哪台服务器?@eis,即使在我打印异常后,也不会出现异常。。