gpt4 book ai didi

java - REST:如何构建一个以参数作为第一个标记的请求路径?

转载 作者:行者123 更新时间:2023-12-01 09:02:22 24 4
gpt4 key购买 nike

我是 RESTful 服务的新手。我通常在 JBoss/Wildfly 环境中开发 Java EE 应用程序和 SOAP 服务。我目前正在尝试进入 RESTful 服务以拓宽我的知识。由于我对 JBoss/Wildfly 很熟悉,所以我决定选择 RESTEasy。

我决定为示例宠物链式店创建 RESTful 服务。作为链式店,宠物店拥有多个商店,这些商店由商店 id 标识(例如,shop1、shop2 等)。我创建了多个 REST 服务来根据技术功能对服务进行分割(例如文章服务 =>article.war、订单服务 =>orde.war 等。

我想创建人类可读的 URL,例如:
获取:
http://mypetshop.example/rest/ {shopId}/article/{articleId}

使用 JSON 格式的订单内容进行 POST:
http://mypetshop.example/rest/ {shopId}/订单/创建

到目前为止,我只成功创建了如下 URL:
获取:
http://mypetshop.example/rest/article/ {shopId}/{articleId}

使用 JSON 格式的订单内容进行 POST:
http://mypetshop.example/rest/order/create/ {商店ID}

我想要的 REST 路径是否可行,或者我是否必须跟上当前的解决方案?

最诚挚的问候,CB

以下是文章服务的示例代码:

ArticleRestApplication.java:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath(ArticleRestApplication.ROOT_PATH)
public class OrderRestApplication extends Application {
public static final String ROOT_PATH = "/article";
}

ArticleService.java

public interface ArticleService{
Article getArticle(String shopId, Integer articleId);
}

ArticleServiceImpl.java:

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.google.gson.Gson;

@Path("/")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public class ArticleServiceImpl implements ArticleService {
public ArticleServiceImpl() {
super();
}

@GET
@Path("/{shopId}/{articleId}")
public Article getArtikel(
@PathParam("shopId") String shopId,
@PathParam("articleId") Integer articleId) {
System.out.println(String.format("Shop ID: \"%s\"", shopId));
System.out.println(String.format("Article ID: \"%s\"", articleId));
return gson.toJson(new Article(articleId));
}
}

文章.java:

import java.io.Serializable;
import java.math.BigDecimal;

import javax.xml.bind.annotation.XmlRootElement;

@SuppressWarnings("serial")
@XmlRootElement(name = "article")
public class Article implements Serializable {
private String shopId;
private int articleId;
private String name = "Super pet food";
private BigDecimal price = new BigDecimal("1.00");
private int unitsInStock = 1000;

public Article(String shopId, int articleId) {
super();
this.shopId = shopId;
this.articleId = articleId;
}
}

最佳答案

是的,你可以
像下面这样

休息/订单/1/已完成

这里在rest servlet路径中休息,为类订购,然后使用@Path("{orderId}/completed")

 @Path("orders")
public class OrderService {

@GET
@Path("{orderId}/completed")
public String getOrders(@PathParam("orderId") String orderId) {
return "orderId: " + orderId;
}

@GET
@Path("summary")
public String getOrdersSummary() {
return "orders summary";
}
}

现场演示:http://jerseyexample-ravikant.rhcloud.com/rest/orders/1/completed

关于java - REST:如何构建一个以参数作为第一个标记的请求路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573256/

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