RESTful Web服务无法处理请求正确方法(RESTful Webservice does no

2019-07-29 18:18发布

我从多个RESTful Web服务方法retreiving值。 在这种情况下两种方法彼此干扰,由于与请求方法的一个问题。

@GET
@Path("/person/{name}")
@Produces("application/xml")
public Person getPerson(@PathParam("name") String name) {
    System.out.println("@GET /person/" + name);
    return people.byName(name);
}

@POST
@Path("/person")
@Consumes("application/xml")
public void createPerson(Person person) {
    System.out.println("@POST /person");
    System.out.println(person.getId() + ": " + person.getName());
    people.add(person);
}

当我尝试使用下面的代码来调用createPerson()方法,我的GlassFish服务器将导致“@ GET /人/ 名字,我试图创造一个人 ”的。 这意味着@GET方法被调用,即使我没有发{名称}参数(你可以在代码中看到)。

URL url = new URL("http://localhost:8080/RESTfulService/service/person");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Accept", "application/xml");
connection.setDoOutput(true);
marshaller.marshal(person, connection.getOutputStream());

我知道这是问了很多在我的代码挖的,但我是什么在这种情况下做错了什么?

UPDATE

由于createPerson是一个空白,我不处理connection.getInputStream()。 这实际上似乎导致无法通过我的服务处理的请求。

但实际请求是在connection.getOutputStream()发送的,对不对?

更新2

该RequestMethod做的工作,只要我处理与一个返回值,因此connection.getOutputStream()的方法。 当我尝试调用一个空白,因此不处理connection.getOutputStream(),该服务将不会收到任何请求。

Answer 1:

你应该设置“内容类型”,而不是“接受”头。 内容类型指定发送到接收者的媒体类型,而接受的是关于客户端接受了媒体的类型。 在头更多详情, 点击这里 。

这里是Java客户端:

public static void main(String[] args) throws Exception {
    String data = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><person><name>1234567</name></person>";
    URL url = new URL("http://localhost:8080/RESTfulService/service/person");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/xml");

    connection.setDoOutput(true);
    connection.setDoInput(true);        

    OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
    wr.write(data);
    wr.flush();

    // Get the response
    BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    wr.close();
    rd.close();

    connection.disconnect();
}

这里是一样的使用curl:

curl -X POST -d @person --header "Content-Type:application/xml" http://localhost:8080/RESTfulService/service/person

,这里的“人”是包含XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><person><name>1234567</name></person>


文章来源: RESTful Webservice does not handle Request Method properly