有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用resteasy/jaxrs从请求负载接收两种类型的数据

我正在通过http请求向Java服务器发送json格式的数据。我在接收请求方面取得了巨大成功,其功能如下

Boolean deleteUsers(List<Long> userIds) {
    // ...
    return true;
}

我在Java服务器上使用RESTEasy,它很高兴地将请求的有效负载转换成非常方便的List<Long>

现在我想发送一个字符串一个数字列表!理想情况下,我的接收函数应该是

Boolean deleteUsers(String string, List<Long>userIds) {
    // ....
    return true;
}

唉,RESTEasy似乎不知道我的意思,并且被有效负载卡住了

如何从有效负载接收多种类型的数据


共 (2) 个答案

  1. # 1 楼答案

    似乎需要一个包装器对象

    class TwoObjectDTO {
        String string;
        List<Long> listOfNumbers;
    }
    
    @POST
    Boolean deleteUsers(TwoObjectDTO object) {
        ...
    }
    
  2. # 2 楼答案

    根据您的特定用例,您可以简单地将第一个参数(“字符串”)添加到@Path注释中,例如

    @POST
    @Path("{string:.*}")
    @Consume(MediaType.APPLICATION_JSON)
    @Produce(MediaType.APPLICATION_JSON)
    Boolean deleteUsers(@PathParam("string") String string, List<Long>userIds) {
    ...
    }
    

    这将导致以下URL形式:

    /service/<string>/
    

    使用包含用户ID列表的有效负载(作为json)

    正如您可能意识到的,建议使用@POST方法类型,因为服务构造方法不是幂等的。否则,@DELETE将被支持