反序列化资源中的 POST 个参数

Deserialise POST paramaters in a resource

来自 django 背景,dw 不是很强,请放轻松!

我有一个资源使用 post 数据如下:

    @POST
    @Path("changestatus/{status}")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response changeStatus(String dataString,
                                            @PathParam("status") Status status) {

        HashMap<String, Object> responseMessage = new HashMap<>();
        Response.Status respStatus = Response.Status.OK;
        //    --- ugly stuff to clean things hence the question!!! 
        // dataString = dataString.replace("dataString=", "").replace("%2C", ",");
        // do stuffs

现在,如果我将输入 POST 参数作为 abcd,tklmj,1234cd 传递,资源会将 dataString 作为 dataString=abcd%2Ctklmj%2C1234cd

dataStrings 值字面上有 dataString 字,连同 , 转换为 %2C,我如何反序列化它们以获取原始输入?如从其值中删除 dataString%2C

ajax 来电

            var target_url = statusURL + status_text;
            data = {"dataString": all_data}
            $.ajax({
                type: "POST",
                url: target_url,
                data: data,
                success: function(data){
                    console.log(data)
                }
            });

我使用的是 dropwizard 1.2.2 版。

使用HashMap处理body中的数据:

@POST
@Path("changestatus/{status}")
@Consumes(MediaType.APPLICATION_JSON)
public Response changeStatus(HashMap data,
                         @PathParam("status") Status status) {

获取值

 String param1 = (String) data.get(<your param name>)

Resource 期待 JSON 但您发送的是表单编码数据。

您可以将请求更改为发送有效 JSON – 在这种情况下 should work, or change the Resource to consume form-encoded data and then extract it using FormParam,即:

@POST
@Path("changestatus/{status}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public Response changeStatus(
    @FormParam("dataString") String dataString, 
    @PathParam("status") Status status) { 
    ...
}