是否有可能让jersey在不使用bean的情况下读取请求体的json变量?

时间:2013-02-06 14:58:03

标签: json jersey

在jersey中,Java bean可以在请求体内自动反序列化,但如果我想在不创建特殊类型的情况下读取参数,该怎么办呢?是否可以使用注释来完成此操作。

我目前的代码是:

public class RequestData {
    String param;
}

...

public Response readData(RequestData data) {
    data.getParam();
    ...
}

我希望它像:

public Response readData(@RequestParam("param") String param) {
    ...
}

如果尚未清楚输入JSON是:

{
    "param":"some value"
}

2 个答案:

答案 0 :(得分:0)

输入JSON的类型为Map<String, String>,因此如果您想要无差别输入,可以将其用作请求参数并读取所需的值。

请注意@RequestParam查看请求参数而不是正文,因此它是一个不同的野兽。

答案 1 :(得分:0)

你可以让Jersey按原样传递String(按照注释),然后使用Jackson ObjectMapper(Jersey内部用于JSON绑定)对数据进行数据绑定:

Map<String,Object> map = objectMapper.readValue(param, Map.class);

要访问ObjectMapper,您可以在资源类中使用JAX-RS注入注释(我认为@Context?):

@Context
private ObjectMapper objectMapper;