休息服务URL给出不起作用并给出错误

问题描述 投票:0回答:1

所以我一直在努力使这项休息服务工作,我已经使用了几天,但无论我尝试什么,都无法让URL工作。我首先尝试了互联网给出的关于web.xml文件的所有建议。一旦我意识到这是最后一个原因,我尝试使用'@ApplicationPath(“/”)'注释的JAXRSConfiguration类。

所以这是JAXRS类:

    @ApplicationPath("api")
    public class JAXRSConfiguration extends Application {

        public JAXRSConfiguration() {
            BeanConfig beanConfig = new BeanConfig();
            beanConfig.setVersion("2.0.0");
            beanConfig.setSchemes(new String[]{"http"});
            beanConfig.setHost("localhost:8080");
            beanConfig.setBasePath("/MyApp/api");
            beanConfig.setResourcePackage("rest");
            beanConfig.setPrettyPrint(true);
            beanConfig.setScan();
            getClasses();
        }

        @Override
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<>();
            classes.add(UserResource.class);
            classes.add(MessageService.class);
            return classes;
        }
    }

这是我的一个资源文件:

@Path("/users")
public class UserResource {
    private UserService service = new UserService();

    @DELETE
    @Path("/{userId}")
    public void deleteMessage(@PathParam("userId") int id) {
        service.deleteUser(id);
    }

    @POST
    @Path("/{userId}/follow/{userToFollowId}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public void followUser(@PathParam("userToFollowId") int userId, int userToFollowId) {
        service.followUser(userId, userToFollowId);
    }

    @POST
    @Path("/register")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public User registerUser(User user) {
        return service.registerUser(user);
    }

    @PUT
    @Path("/{userId}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public User updateUser(User user) {
        return service.updateUser(user);
    }

    @GET
    @Path("/{userId}")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_XML)
    public User getUser(@PathParam("userId") int id) {
        return service.getUser(id);
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getAllUsers() {
        return service.getAllUsers();
    }

    @GET
    @Path("/{userId}/followers")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getFollowers(@PathParam("userId") int id) {
        return service.getFollowers(id);
    }

    @GET
    @Path("/{userId}/followings")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getFollowings(@PathParam("userId") int id) {
        return service.getFollowings(id);
    }

    @GET
    @Path("/{userId}/kweets")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_XML)
    public List<Kweet> getKweets(@PathParam("userId") String username) {
        return service.getKweets(username);
    }

    @GET
    @Path("/{userId}/timeline")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(MediaType.APPLICATION_XML)
    public List<Kweet> loadTimeline(@PathParam("userId") int id) {
        return service.loadTimeline(id);
    }
}

我得到的错误是:

HTTP状态404 - 未找到类型状态报告

未找到信息

description请求的资源不可用。

GlassFish Server开源版5.0

glassfish jax-rs
1个回答
0
投票

打开您的IDEA模块设置,并查看工件。你会发现这样的东西

enter image description here

war /爆炸工件的突出显示名称将成为您的服务器上下文路径。 在我的情况下,它会成为

http://localhost:8080/kwetter-0.0.1

你应该用它替换它。 现在,您需要添加@ApplicationPath路径,即/api。所以它变成了

http://localhost:8080/kwetter-0.0.1/api

现在,您需要添加REST服务@Path,即/users。所以它变成了

http://localhost:8080/kwetter-0.0.1/api/users

一个例子:

GET http://localhost:8080/kwetter-0.0.1/api/users/{userId}/followers

在运行/调试配置下,确保没有选中此选项。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.