休息服务 URL 不工作并给出错误
Rest Service URL giving Not working and giving Error
所以我一直在努力让这个休息服务工作,我已经用了几天了,但无论我怎么努力,都无法让 URL 工作。我首先尝试了互联网上关于 web.xml 文件的所有建议。一旦我意识到这是最后一个原因,我就尝试了带有 '@ApplicationPath("/")' 注释的 JAXRSConfiguration class。
这是 JAXRS Class:
@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 - 未找到
输入状态报告
找不到消息
说明请求的资源不可用。
GlassFish Server 开源版 5.0
打开您的 IDEA 模块设置,然后在 Artifacts 下查看。你会发现这样的东西
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
请确保您没有在 Run/Debug 配置下选中此项。
所以我一直在努力让这个休息服务工作,我已经用了几天了,但无论我怎么努力,都无法让 URL 工作。我首先尝试了互联网上关于 web.xml 文件的所有建议。一旦我意识到这是最后一个原因,我就尝试了带有 '@ApplicationPath("/")' 注释的 JAXRSConfiguration class。
这是 JAXRS Class:
@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 - 未找到 输入状态报告
找不到消息
说明请求的资源不可用。
GlassFish Server 开源版 5.0
打开您的 IDEA 模块设置,然后在 Artifacts 下查看。你会发现这样的东西
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
请确保您没有在 Run/Debug 配置下选中此项。