我有这个代码使用Angular 4 HttpClient
,应该与一个简单的RESTful JAVA Web服务进行通信并获得一个JSON
string:
this.client.post('http://localhost:8080/ToDoService/rest/service/create', {id: 'foo', todo: 'bar'}).subscribe((data) => {
console.log("Got data: ", data);
}, (error) => {
console.log("Error", error);
})
它不起作用。我的意思是id
和todo
参数没有传递给REST后端。
另一方面,如果我将以上代码更改为:
this.client.post('http://localhost:8080/ToDoService/rest/service/create?id=foo&todo=bar', '').subscribe((data) => {
console.log("Got data: ", data);
}, (error) => {
console.log("Error", error);
})
一切正常,但我确定第二个剪断是错误的。它只是看起来不对劲。
你能给我一个推动并指出我的错误吗?
P.S
JAVA
后端:
@Path("/service")
public class Rest extends Application{
@POST
@Path("/create")
public Response printMessage(@QueryParam("id") String userId, @QueryParam("todo") String toDo) {
JSONObject result = new JSONObject();
result.put("id", userId);
result.put("todo", toDo);
return Response.status(200).entity(result.toString()).build();
}
}
您正在映射QueryParams,您需要将该有效负载映射到Map或Object:
class PayLoad {
private String id;
private String todo;
// Getter and Setters
}
@Path("/service")
public class Rest extends Application{
@POST
@Path("/create")
public Response printMessage(@RequestBody PayLoad payload) {
JSONObject result = new JSONObject();
result.put("id", payload.getId());
result.put("todo", payload.getTodo());
return Response.status(200).entity(result.toString()).build();
}
}
希望这可以帮助!
首先,查看MyKong tutorial,您可以看到@QueryParam
接受URL中发送的参数。这是第一个问题。回到主要观点。
我不是Angular 4的专家,但我认为问题在于您的架构更深层次。你发送到你的后端:
{id: 'foo', todo: 'bar'}
并希望在你的Java:
@QueryParam("id") String userId, @QueryParam("todo") String toDo
您传递一个对象并期望在Java后端有两个字符串。如果你想获得你的对象,你可以创建这种类:
public class JsonWrapper {
private String id;
private String todo;
// Classic constructor and setters
}
然后,在您的服务中:
@Path("/service")
public class Rest extends Application {
@POST
@Path("/create")
public Response printMessage(@RequestBody JsonWrapper wrapper) {
JSONObject result = new JSONObject();
result.put("id", wrapper.getId());
result.put("todo", wrapper.getTodo());
return Response.status(200).entity(result.toString()).build();
}
}
如果JsonWrapper
不起作用,我认为Map
也可以做到这一点。