java - 使用 JAX-RS 将 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 对象的这种转换?

最佳答案

是的,您可以这样做,但您需要自己编写转换代码。幸运的是,这很容易,您只需要编写一个具有公共(public) 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();
    ...
}

https://stackoverflow.com/questions/2697541/

相关文章:

json - LibreOffice Calc 是否支持 JSON 文件导入/排序?

json - 我可以使用哪些程序来可视化 JSON 文件?

c# - 在 JSON 反序列化期间没有为 'System.String' 类型定义无参数构造函数

java - 如何防止 Gson 将长数字(一个 json 字符串)转换为科学记数法格式?

php - 添加json文件注释

json - 转义正则表达式以获取有效的 JSON

c++ - 使用 boost 属性树读取 int 数组

java - 如何使用 gson 调用默认反序列化

javascript - Sequelize - 如何仅返回数据库结果的 JSON 对象?

json - 如何解析/反序列化动态 JSON