Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带JSON的RESTful web服务:PUT和DELETE不起作用_Java_Json_Web Services_Rest - Fatal编程技术网

Java 带JSON的RESTful web服务:PUT和DELETE不起作用

Java 带JSON的RESTful web服务:PUT和DELETE不起作用,java,json,web-services,rest,Java,Json,Web Services,Rest,我正在尝试在Netbeans上设置一个简单的RESTful web服务。基本上,我有一个容器,其中的组件是具有3个属性的简单订单对象:id、total和项目列表。 容器上的GET和POST与组件上的GET一样工作正常。不起作用的是组件的PUT和DELETE:我没有收到任何错误,只是什么也没有发生。 由于GET正在工作,可能错误在客户端,所以我在这里发布了负责单个订单的客户端类 package restclientjson; import javax.ws.rs.ClientErrorE

我正在尝试在Netbeans上设置一个简单的RESTful web服务。基本上,我有一个容器,其中的组件是具有3个属性的简单订单对象:id、total和项目列表。 容器上的GET和POST与组件上的GET一样工作正常。不起作用的是组件的PUT和DELETE:我没有收到任何错误,只是什么也没有发生。 由于GET正在工作,可能错误在客户端,所以我在这里发布了负责单个订单的客户端类

package restclientjson;

    import javax.ws.rs.ClientErrorException;
    import javax.ws.rs.client.Client;
    import javax.ws.rs.client.WebTarget;


    public class JSONOrderClient {

        private WebTarget webTarget;
        private Client client;
        private static final String BASE_URI = "http://localhost:8080/RESTServerJSON/webresources";

        public JSONOrderClient(String id) {
            client = javax.ws.rs.client.ClientBuilder.newClient();
            String resourcePath = java.text.MessageFormat.format("orders/{0}", new Object[]{id});
            webTarget = client.target(BASE_URI).path(resourcePath);
        }

        public void setResourcePath(String id) {
            String resourcePath = java.text.MessageFormat.format("orders/{0}", new Object[]{id});
            webTarget = client.target(BASE_URI).path(resourcePath);
        }

        public void putJson(Object requestEntity) throws ClientErrorException {
            webTarget.request(javax.ws.rs.core.MediaType.TEXT_PLAIN).put(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_JSON));
        }

        public void delete() throws ClientErrorException {
            webTarget.request().delete();
        }

        public <T> T getJson(Class<T> responseType) throws ClientErrorException {
            WebTarget resource = webTarget;
            return resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(responseType);
        }

        public void close() {
            client.close();
        }

    }
包restclientjson;
导入javax.ws.rs.ClientErrorException;
导入javax.ws.rs.client.client;
导入javax.ws.rs.client.WebTarget;
公共类JSONOrderClient{
私有WebTarget WebTarget;
私人客户;
私有静态最终字符串BASE_URI=”http://localhost:8080/RESTServerJSON/webresources";
公共JSONOrderClient(字符串id){
client=javax.ws.rs.client.ClientBuilder.newClient();
字符串resourcePath=java.text.MessageFormat.format(“orders/{0}”,新对象[]{id});
webTarget=client.target(基本URI).path(资源路径);
}
public void setResourcePath(字符串id){
字符串resourcePath=java.text.MessageFormat.format(“orders/{0}”,新对象[]{id});
webTarget=client.target(基本URI).path(资源路径);
}
public void putJson(对象请求实体)引发ClientErrorException{
请求(javax.ws.rs.core.MediaType.TEXT_PLAIN).put(javax.ws.rs.client.Entity.Entity(requestEntity,javax.ws.rs.core.MediaType.APPLICATION_JSON));
}
public void delete()引发ClientErrorException{
webTarget.request().delete();
}
公共T getJson(类响应类型)抛出ClientErrorException{
WebTarget资源=WebTarget;
返回resource.request(javax.ws.rs.core.MediaType.APPLICATION_JSON).get(responseType);
}
公众假期结束(){
client.close();
}
}
编辑:以下是服务器端代码:

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ServiceCore;

import dto.Order;
import java.util.Map;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.DELETE;
import javax.ws.rs.core.MediaType;

/**
 * REST Web Service OrderResource
 *
 * 
 */
public class OrderResource {

    private String id;
    private Map<String,Order> orderMap;

    /**
     * Creates a new instance of OrderResource
     */
    private OrderResource(String id,Map<String,Order> orderMap) {
        this.id = id;
        this.orderMap = orderMap;
    }

    /**
     * Get instance of the OrderResource
     */
    public static OrderResource getInstance(String id,Map<String,Order> orderMap) {
        // The user may use some kind of persistence mechanism
        // to store and restore instances of OrderResource class.
        return new OrderResource(id,orderMap);
    }

    /**
     * Retrieves representation of an instance of ServiceCore.OrderResource
     * @return an instance of dto.Order
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Order getJson() {
        return orderMap.get(id);
    }

    /**
     * PUT method for updating or creating an instance of OrderResource
     * @param content representation for the resource
     */
    @PUT
    @Consumes(MediaType.APPLICATION_JSON)
    public void putJson(Order content) {
        orderMap.put(id, content);
    }

    /**
     * DELETE method for resource OrderResource
     */
    @DELETE
    public void delete() {
        orderMap.remove(id);
    }
}



package ServiceCore;

import dto.Order;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

    /**
     * REST Web Service
     *
     */
    @Path("/orders")
    public class OrdersResource {

        @Context
        private UriInfo context;

        private static Map<String, Order> orderMap= new HashMap<String,Order>();
        {
            orderMap.put("1", new Order(1,2,new String[]{"water","coffee"}));
            orderMap.put("2", new Order(3,400,new String[]{"milk"}));
        }
        private static int id = 3;

        /**
         * Creates a new instance of OrdersResource
         */
        public OrdersResource() {
        }

        /**
         * Retrieves representation of an instance of ServiceCore.OrdersResource
         * @return an instance of dto.Order[]
         */
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public dto.Order[] getJson() {


            Order[] orders = new Order[orderMap.size()];
            for(int i=0; i<orderMap.size(); i++){
                orders[i]=orderMap.get((i+1)+"");
            }

            return orders;
        }

        /**
         * POST method for creating an instance of OrderResource
         * @param content representation for the new resource
         * @return an HTTP response with content of the created resource
         */
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        @Produces(MediaType.APPLICATION_JSON)
        public Response postJson(Order content) {
            orderMap.put(id+"", content);
            id++;
            return Response.created(context.getAbsolutePath()).build();
        }

        /**
         * Sub-resource locator method for {id}
         */
        @Path("{id}")
        public OrderResource getOrderResource(@PathParam("id") String id) {
            return OrderResource.getInstance(id,orderMap);
        }
    }
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包服务核心;
进口订单;
导入java.util.Map;
导入javax.ws.rs.products;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.GET;
导入javax.ws.rs.PUT;
导入javax.ws.rs.DELETE;
导入javax.ws.rs.core.MediaType;
/**
*RESTWeb服务OrderResource
*
* 
*/
公共类OrderResource{
私有字符串id;
私有地图;
/**
*创建OrderResource的新实例
*/
私有OrderResource(字符串id,映射orderMap){
this.id=id;
this.orderMap=orderMap;
}
/**
*获取OrderResource的实例
*/
公共静态OrderResource getInstance(字符串id,映射orderMap){
//用户可以使用某种持久性机制
//存储和还原OrderResource类的实例。
返回新的OrderResource(id、orderMap);
}
/**
*检索ServiceCore.OrderResource实例的表示形式
*@return一个dto.Order实例
*/
@得到
@产生(MediaType.APPLICATION_JSON)
公共秩序getJson(){
返回orderMap.get(id);
}
/**
*更新或创建OrderResource实例的PUT方法
*@param资源的内容表示形式
*/
@放
@使用(MediaType.APPLICATION_JSON)
公共内容(订单内容){
orderMap.put(id,content);
}
/**
*资源OrderResource的删除方法
*/
@删除
公共作废删除(){
orderMap.remove(id);
}
}
包服务核心;
进口订单;
导入java.util.HashMap;
导入java.util.Map;
导入javax.ws.rs.core.Context;
导入javax.ws.rs.core.UriInfo;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.POST;
导入javax.ws.rs.products;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.Response;
/**
*RESTWeb服务
*
*/
@路径(“/订单”)
公共类OrdersResource{
@上下文
私有信息上下文;
私有静态映射orderMap=newhashmap();
{
put(“1”,新的顺序(1,2,新字符串[]{“water”,“coffee”});
put(“2”,新订单(3400,新字符串[]{“milk”}));
}
私有静态int-id=3;
/**
*创建OrdersResource的新实例
*/
公共秩序资源(){
}
/**
*检索ServiceCore.OrdersResource实例的表示形式
*@return一个dto.Order的实例[]
*/
@得到
@产生(MediaType.APPLICATION_JSON)
public dto.Order[]getJson(){
订单[]订单=新订单[orderMap.size()];

对于Java中的(inti=0;i),大多数web框架使用多个Servlet来处理请求,通常在处理请求后立即丢弃Servlet


您可能需要将项目映射放在不同的上下文中,如应用程序上下文,它在应用程序的整个生命周期中都是持久的。

在Java中,大多数web框架使用多个Servlet来处理请求,通常在处理请求时丢弃Servlet


您可能需要将项目映射放在不同的上下文中,例如应用程序上下文,它在应用程序的整个生命周期中都是持久的。

您是否确保服务器端工作正常?您是否可以分享您如何实现端点?您是否确保服务器端工作正常?您是否可以你是如何实现端点的?有趣的事