当前位置: 首页 > 面试题库 >

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

长孙鸿波
2023-03-14
问题内容

我有一个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对象的这种转换?


问题答案:

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


 类似资料:
  • 我有下一个pojo: 和rs服务: 当我尝试访问资源时,我会得到一个循环 如何正确转换包含对自身引用的类?

  • 我有一个用例,我需要限制可以作为查询参数传递的值。 在上面的例子中,我想限制可以通过API传递给的查询参数的值。 是否有任何现有的CXF注释,我可以用来限制参数上的值?我没有找到任何,所以我尝试了以下解决方案。 我的方法: 修改后的界面如下所示。 我写了一个CXF拦截器来拦截应用编程接口的调用。我使用反射来获取params的句柄。但是我面临的问题是拦截器查看了Fooimpl.get的Foo细节方法

  • 我正在编写一个util函数,以根据传递给我的任何HQL获取总记录计数,而不加载所有数据。传入的HQL可能非常复杂,有大量的选择、联接、条件、分组和排序。为此,我想用中选择计数(*)来包装查询。我发现,这在HQL中是不可能的,因为Hibernate不允许在FROM元素中进行子查询。现在,我正在尝试将这个随机的HQL查询转换为一个可执行的SQL语句,而不内联参数值,该查询可能具有一些命名参数(其中一些

  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 问题内容: 我希望我的JSON看起来像这样: 到目前为止的代码: 和 我只是缺少如何使用Jackson将Java对象转换为JSON的部分: 我的问题是:我的课程正确吗?我必须调用哪个实例,以及如何实现此JSON输出? 问题答案: 要使用Jackson 转换JSON:

  • 问题内容: 使用Marshaller将Java对象转换为XML相当容易。但是我需要单独使用marshaller将Java对象转换为JSON。我知道像使用gson或Xstream这样的东西很好,但是我需要使用Marshaller。如何实现呢? 提前致谢。 问题答案: 注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB(JSR-222) 专家组的成员, 如果将MOX