为什么我的参数没有传递给RESTful Web服务?

问题描述 投票:0回答:2

我有这个代码使用Angular 4 HttpClient,应该与一个简单的RESTful JAVA Web服务进行通信并获得一个JSONstring:

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);           
})

它不起作用。我的意思是idtodo参数没有传递给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();
        }
}
java angular rest
2个回答
2
投票

您正在映射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();
        }
}

希望这可以帮助!


1
投票

首先,查看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也可以做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.