gpt4 book ai didi

java - JAXRS 的 GET 方法的多个参数

转载 作者:行者123 更新时间:2023-12-01 23:59:22 31 4
gpt4 key购买 nike

我正在使用 java (Netbeans IDE) 创建 Restful 服务。我从两个相关表创建了两个实体类。我还从模式中创建了 Restful 服务。我使用了容器项目设计模式。我需要从单个容器调用两个以上的资源。我已经完成了以下代码

CategoriesResource.java

@Path("/categories")
public class CategoriesResource {

@Context
private UriInfo context;

EjbLookup lookup=new EjbLookup();
CategoryFacade categoryFacade=lookup.lookupCategoryFacadeBean();

public CategoriesResource() {
}

@GET
@Produces("application/json")
public List<Category> getAllCategories() {
List<Category> categoryList;
categoryList=categoryFacade.findAll();
return categoryList;
}

@POST
@Consumes("application/json")
@Produces("application/json")
public Response addCategory(Category content) {
categoryFacade.create(content);
return Response.created(context.getAbsolutePath()).build();
}


// @Path("{category}")
// public CategoryResource getCategoryResource(@QueryParam("category") String category) {
// return CategoryResource.getInstance(category);
// }
//when I uncomment these four lines of code it gives an exception java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: com.sun.jersey.spi.inject.Errors$ErrorMessagesException
@Path("{siteID}")
public CategoryBySiteResource getCategoryBySiteResource(@QueryParam("siteId") Integer site) {
return CategoryBySiteResource.getInstance(site);
}

}

CategoryBySiteResource.java

public class CategoryBySiteResource {

private Integer site;

EjbLookup lookup=new EjbLookup();
CategoryFacade categoryFacade=lookup.lookupCategoryFacadeBean();

private CategoryBySiteResource(Integer site) {
this.site = site;
}

public static CategoryBySiteResource getInstance(Integer site) {
return new CategoryBySiteResource(site);
}


@GET
@Produces("application/json")
public List<Category> getCategoryById() {
return categoryFacade.retrieveCategory(site);
}

}

CategoryResource.java

public class CategoryResource {

private String category;

EjbLookup lookup=new EjbLookup();
CategoryFacade categoryFacade=lookup.lookupCategoryFacadeBean();

private CategoryResource(String category) {
this.category = category;
}

public static CategoryResource getInstance(String category) {
return new CategoryResource(category);
}


@GET
@Produces("application/json")
public Category getCategoryById() {
return categoryFacade.find(Integer.parseInt(category));
}

@PUT
@Consumes("application/json")
public void updateCategory(Category content) {
categoryFacade.edit(content);
}

@DELETE
public void deleteCategoryById() {


}
}

最佳答案

每个子资源定位器都需要有唯一的路径。但是您为每个解析为相同 URL 的路径参数指定了一个路径参数。请注意,如果为路径参数指定不同的名称,那是无关紧要的,因为路径参数名称仅在 URL->方法参数映射的上下文中有用。从URL解析的角度来看,它们是相同的。

Root Relative Path: /categories
Sub Resource Path1: /{category}
Sub Resource Path2: /{siteID}

给定 URL,例如 http://www.example.com/categories/10,运行时无法确定是否调用子资源方法 getCategoryResourcegetCategoryBySiteResource,因为它们都是符合条件的匹配项。

为了解决这个问题,您需要为每个子资源方法赋予唯一的路径名。

关于java - JAXRS 的 GET 方法的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126967/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com