我运行一个非常简单的REST Web服务来接收查询中的字符串参数,处理它们并发回字符串响应。为了解析字符串
中的参数param1=testData1¶m2=testData2&
我使用String.split()
作为:
@POST
@Produces(MediaType.TEXT_PLAIN)
public String post(String str) {
String[] parts = str.split("&");
String part1 = parts[0]; // param1=testData1
String part2 = parts[1]; // param2=testData2
......do something on these values and return String....
return str;
}
获取参数值我将不得不再次拆分..... 有人可以建议一个更清洁和优雅的解决方案来获得这些参数值..
答案 0 :(得分:3)
假设它的表单参数,一种适用于Jersey 1.x或Jersey 2.x的方法是注入MultivaluedMap
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String post(MultivaluedMap<String, String> form) {
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, List<String>> params : form.entrySet()) {
for (String key: params.getValue()) {
builder.append("key: ").append(params.getKey()).append("; ")
.append("value: ").append(params.getValue().get(0)).append("\n");
}
}
return builder.toString();
}
如果您提前知道表单键的名称,则可以创建一个bean。
public class Bean {
@FormParam("key1")
private String value1;
@FormParam("key2")
private String value2;
// getter and setters
}
对于Jersey 2.x,你会注入@BeanParam
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@BeanParam Bean bean) {
}
对于Jersey 1.x,你会注入@InjectParam
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@InjectParam Bean bean) {
}
请注意,bean注入也适用于所有其他@XxxParam
,而不仅仅是@FormParam
,例如@QueryParam
,@PathParam
。你可以混合搭配它们。
或者如果你提前知道名字,如果你不需要豆子,你可以简单地在方法签名中声明所有形式参数
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@FormParam("key1") String value1,
@FormParam("key2") String value2) {
}