使用GenericType的RESTful Web服务

时间:2016-07-22 14:35:28

标签: java web-services rest

这是我的代码的第一部分:

@Path("compute/{x}")
@GET
@Produces(MediaType.TEXT_PLAIN) // "text/plain"
public List<Double> compute(@PathParam("x") Double x) {
    List<Double> list = new Vector<Double>();
    list.add(Math.log(x));
    list.add(Math.exp(x));
    return list;
}

我正在学习/构建RESTful Web服务。利用该RESTful Web服务的客户端就是这样做的。

javax.ws.rs.client.Client client = ClientBuilder.newClient();

WebTarget uri_basique = client
        .target("http://localhost:8080/Rest_ws/rest");

WebTarget targeted_resource = uri_basique.path("simple/compute/{x}")
        .resolveTemplate("x", 5);

Builder builder = targeted_resource.request(MediaType.TEXT_PLAIN);
List<Double> compute = builder.get(new GenericType<List<Double>>(){});

System.out.println("log (5) = " + compute.get(0));
System.out.println("exp (5) = " + compute.get(1));

它应该工作。但是当我执行时,我得到:

javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
    ...
    at ws_rs.Client.test3(Client.java:26)

有问题的一行是:

List<Double> compute = builder.get(new GenericType<List<Double>>(){});

如果有人可以向我提供任何解释/解决方案。

1 个答案:

答案 0 :(得分:1)

HTTP 500内部服务器错误表示在调用其余api时出现错误。似乎Web服务无法将列表翻译为“text / plain”,因此它会抛出错误。 Jersey不提供public function check_login() { if ($this->request->is('post')) { $admin = $this->Auth->identify(); if ($admin) { $this->Auth->setUser($admin); $result['status'] = 'success'; echo json_encode($result); } $result['status'] = 'failure'; $result['message'] = 'Your username or password is incorrect'; echo json_encode($result); die; } } 将java.util.List转换为“text / plain”。您必须为此提供自定义MessageBodyReader/Writer