解析请求参数而不编写包装类

时间:2016-11-24 11:14:34

标签: jersey dropwizard pojo

如何处理json请求并解析dropWizard中的请求参数?

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String test(@Context final HttpServletRequest request) {
    JSONObject data=new JSONObject();
    System.out.println(request);
    System.out.println(request.getParameterMap());
    System.out.println(">>>>>>>>>");

    return "{\"status\":\"ok\"}";
}

我编写了上面的代码并尝试了以下请求。

curl -XPOST  -H "Content-Type: application/json" --data {"field1":"val1", "field2":"val2"} http://localhost:8080/test 

request.getParameterMap(){}

如何在不编写包装类的情况下解析参数?

1 个答案:

答案 0 :(得分:0)

你的curl命令可能需要一些额外的数据引用(没有它们我收到错误):

curl -H "Content-type: application/json" -X POST -d '{"field1":"tal1", "field2":"val2"}' http://localhost:8080/test

您发送的POST请求没有 URL参数。我不确定你为什么会在那里看到一些东西。

我不知道您使用的是dropwizard的哪个版本,但是当注释方法时,我无法使@POST@Path("/something")注释组合起来。我得到了HTTP ERROR 404

为了使其工作,我必须将@Path注释移动到资源/类级别,并在方法中仅保留@Post注释。

@Path("/test")
public class SimpleResource {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public String test(final String data) throws IOException {
        System.out.println("And now the request body:");
        System.out.println(data);
        System.out.println(">>>>>>>>>");

        return "{\"status\":\"ok\"}";
    }
}

String为例,只需按上述方式获取请求的正文。取自这里:How to get full REST request body using Jersey?

控制台看起来像:

INFO  [2016-11-24 15:26:29,290] org.eclipse.jetty.server.Server: Started @3539ms
And now the request body:
{"field1":"tal1", "field2":"val2"}
>>>>>>>>>