这是我的代码的第一部分:
@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>>(){});
如果有人可以向我提供任何解释/解决方案。
答案 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
。