如何处理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()
是{}
如何在不编写包装类的情况下解析参数?
答案 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"}
>>>>>>>>>