在资源中反序列化POST参数

时间:2018-10-10 06:09:49

标签: java post dropwizard

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

我有一个获取帖子数据的资源,如下所示:

    @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

dataString的值在字面上包含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。

2 个答案:

答案 0 :(得分:2)

使用HashMap处理正文中的数据:

@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>)

答案 1 :(得分:2)

Resource正在使用JSON,但您正在发送表单编码的数据。

您可以更改请求以发送有效JSON(在这种情况下Viet's answer应该可以使用),也可以更改Resource以使用形式编码的数据,然后使用FormParam进行提取,即:

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