rest - 使用 REST 返回值

标签 rest tomcat

当我尝试使用 REST 返回值时出现错误。错误是:

A HTTP GET method, public - should not consume any entity.

这是我的课:

public class StockManagement {


	ArrayList<String> items = new ArrayList<>();

	ArrayList<Integer> stockLevel = new ArrayList<>();
	
	@GET
	@Produces("application/xml")
	public String addItem(String item) {
	if(items.contains(item)) { // returns true is item is exists else false
		String r = "Item is already in list";
		String result = "@Produces(\"application/xml\")" +  r;
		return  "<StockManagementService>"+ "<div>" + result  + "</div>" +"</StockManagementService>";
	}
	else {
		String r = "Item has been added successfully";
		String result = "@Produces(\"application/xml\")" + r;
		items.add(item); // add item to inventory
		stockLevel.add(0); // set the number of stock for the item in inventory
		return "<StockManagementService>" +"<div>" + result  + "</div>"  +"</StockManagementService>";
		
	}
	}
	
	@GET
	@Produces("application/xml")
	public String setStock(String item, int stockLevels) {
		if(!items.contains(item)) {
			String r = "Item is not in the inventory";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
		}
		else {
			int index = items.indexOf(item);
			stockLevel.set(index, stockLevels);
			
			String r = "Set stock has been complete successfully";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
			
	
		}
	}
	
	@GET

	@Produces("application/xml")
	public String addStock(String item, int numItem) {
		if(!items.contains(item)) {
			String r = "Error, Cannot add item";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
		
		}
		
		else {
			int index = items.indexOf(item);
			String r = "Successfully added stock";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
			
		}
		
		
	}
	
	@GET
	
	@Produces("application/xml")
	public String removeStock(String item, int numItem) {
		if(items.contains(item)) {
			int index = items.indexOf(item);
			int val = stockLevel.get(index);
			val = val - numItem;
			stockLevel.set(index, val);
			
			String r = "Successfully removed item.";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
		}
		else {
			String r = "Item is not in the inventory";
			String result = "@Produces(\"application/xml\")" + r;
			return "<StockManagementService>" + result + "</StockManagementService>";
		}
	}

这是 eclipse 终端上显示的错误:

SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  WARNING: A HTTP GET method, public java.lang.String com.crunchify.restjersey.StockManagement.setStock(java.lang.String,int), should not consume any entity.
  WARNING: A HTTP GET method, public java.lang.String com.crunchify.restjersey.StockManagement.addStock(java.lang.String,int), should not consume any entity.
  WARNING: A HTTP GET method, public java.lang.String com.crunchify.restjersey.StockManagement.removeStock(java.lang.String,int), should not consume any entity.
  WARNING: A HTTP GET method, public java.lang.String com.crunchify.restjersey.StockManagement.addItem(java.lang.String), should not consume any entity.
  SEVERE: Consuming media type conflict. The resource methods public java.lang.String com.crunchify.restjersey.StockManagement.addStock(java.lang.String,int) and public java.lang.String com.crunchify.restjersey.StockManagement.setStock(java.lang.String,int) can consume the same media type
  SEVERE: Consuming media type conflict. The resource methods public java.lang.String com.crunchify.restjersey.StockManagement.removeStock(java.lang.String,int) and public java.lang.String com.crunchify.restjersey.StockManagement.setStock(java.lang.String,int) can consume the same media type
  SEVERE: Consuming media type conflict. The resource methods public java.lang.String com.crunchify.restjersey.StockManagement.addItem(java.lang.String) and public java.lang.String com.crunchify.restjersey.StockManagement.setStock(java.lang.String,int) can consume the same media type

我无法弄清楚这个错误是什么意思,显然它必须是我返回的方式,任何帮助将不胜感激。
谢谢。

最佳答案

没有 promise ,但我认为警告试图提醒您,在 HTTP 中,GET 不接受消息正文。所以 String item 应该被编码到 URI 本身,这可能意味着 @QueryParam 或 @PathParam 注释。

SEVERE 试图告诉您,有多种方法都试图映射到同一路由。也就是说,它们都以相同的方法和相同的应用程序类型映射到相同的URI,那么路由逻辑应该如何在它们之间进行选择。

这可能意味着您需要为每个路径指定不同的路径,或者您应该只有一个带注释的方法,该方法具有选择要使用的实现的逻辑。

关于rest - 使用 REST 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54462571/

相关文章:

在查询字符串或请求正文中包含数据的 Restful URL?

web-services - 通过 HTTPS 公开 RESTful WCF 服务

Java - Jdbc 连接抛出 NullPointerException

rest - Swagger UI 3 中出现奇怪的 "Could not resolve reference: undefined Not Found"消息

java - Apache 服务器上的第一个 REST 调用速度缓慢

c# - 在 Angular 和 .Net Core API 中显示自定义服务器端错误消息

tomcat - 如何使用 Dspace 正确配置 Swordv2-Server?

java - 基于表单的身份验证在 tomcat 6.0 中不起作用

java - 当请求到达 Tomcat 服务器时会发生什么?

maven-2 - 部署 war 时出错(TomCat)