问题描述
如何处理json请求并在dropWizard中解析请求参数?
How to handle json requests and parse the request parameters in 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\"}";
}
我编写了上面的代码,并尝试了以下请求.
I wrote the above code and tried the following request.
curl -XPOST -H "Content-Type: application/json" --data {"field1":"val1", "field2":"val2"} http://localhost:8080/test
但是request.getParameterMap()
是{}
如何在不编写包装器类的情况下解析参数?
How to parse the parameters without writing a wrapper class?
推荐答案
您的curl
命令可能需要在数据周围加上一些引号(如果没有它们,我会得到一个错误):
Your curl
command may need some additional quotes around the data (I'm getting an error without them):
curl -H "Content-type: application/json" -X POST -d '{"field1":"tal1", "field2":"val2"}' http://localhost:8080/test
您正在发送POST
请求,没有 URL
参数.我不确定为什么您期望在那里看到一些东西.
You are sending a POST
request without URL
parameters. I'm not sure why you are expecting to see something there.
我不知道您使用的是哪个版本的dropwizard
,但是当对方法进行注释时,我无法使@POST
和@Path("/something")
注释的组合起作用.我正在获取HTTP ERROR 404
.
I don't know which version of dropwizard
you are using but I couldn't make the combination of @POST
and @Path("/something")
annotation to behave when a method is annotated. I'm getting HTTP ERROR 404
.
要使其正常工作,我必须将@Path
注释移至资源/类级别,并在方法中仅保留@Post
注释.
To make it work I have to move the @Path
annotation to the resource/class level and leave only the @Post
annotation at the method.
@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
的形式获取请求的正文,请执行上述操作.从此处获取:如何使用Jersey获得完整的REST请求正文?
To get the body of the request as String
just do as above. Taken from here: 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"}
>>>>>>>>>
这篇关于解析请求参数而无需编写包装器类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!