小编典典

使用JAX-RS将JSON查询参数转换为对象

json

我有一个JAX-RS资源,它的参数如JSON字符串所示:

http://some.test/aresource?query={"paramA":"value1", "paramB":"value2"}

在这里使用JSON的原因是,在实际用例中查询对象可能非常复杂。

我想将JSON字符串转换为Java对象,在示例中为dto:

@GET 
@Produces("text/plain")
public String getIt(@QueryParam("query") DataTransferObject dto ) {
    ...
}

JAX-RS是否支持从作为查询参数传递的JSON到Java对象的这种转换?


阅读 422

收藏
2020-07-27

共1个答案

小编典典

是的,您可以执行此操作,但是您需要自己编写转换代码。幸运的是,这很容易,您只需要编写一个具有公共String构造函数的类即可进行转换。例如:

public class JSONParam {
    private DataTransferObject dto;

    public JSONParam(String json) throws WebApplicationException {
        try {
            // convert json string DataTransferObject and set dto
        }
        catch (JSONException e) {
            throw new WebApplicationException(Response.status(Status.BAD_REQUEST)
                    .entity("Couldn't parse JSON string: " + e.getMessage())
                    .build());
        }
    }

    public DataTransferObject getDTO() {
        return dto;
    }
}

然后,您可以使用:

@GET 
@Produces("text/plain")
public String getIt(@QueryParam("query") JSONParam json) {
    DataTransferObject dto = json.getDTO();
    ...
}
2020-07-27