0

我有一个如下的 GET 请求调用,我得到一个

不正确的参数类型错误

@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/apiData")
MyReturnResponse getData(@QueryParam("request") MyRequestClass apiRequest);

这是请求类:

public class MyRequestClass {
    @NotNull(message = "application name is required")
    public String applicationName;

    @NotNull(message = "code type is required")
    public String codeType;

    @NotNull(message = "request date is required")
    public String requestDate;
}

我不确定我为什么会得到这个。以下是我的 IDE 的建议。

成为原始类型。
有一个接受单个 String 参数的构造函数。
有一个名为 valueOf 或 fromString 的静态方法,它接受单个 String 参数(例如,参见 Integer.valueOf(String))。
有一个 ParamConverterProvider JAX-RS 扩展 SPI 的注册实现,它返回一个 ParamConverter 实例,该实例能够对类型进行“从字符串”转换。
是 List、Set 或 SortedSet,其中 T 满足上述 2、3 或 4。生成的集合是只读的。

我需要做什么?请帮忙。

4

1 回答 1

0

你能行的。您可以考虑使用 BeanParam 注释,那么您的服务定义将是:

MyReturnResponse getData(@BeanParam MyRequestClass apiRequest);

那么你需要在 Java Bean 上注解每个参数:

public class MyRequestClass {
    @QueryParam("name") 
    @NotNull(message = "application name is required")
    public String applicationName;

    @QueryParam
    @NotNull(message = "code type is required")
    public String codeType;

    @QueryParam
    @NotNull(message = "request date is required")
    public String requestDate;
}

使用此配置,您可以使用类似的请求调用服务:

/apiData?name=ApplicationName&codeType=MyType&requestDate=2021-10-21

使用 BeanParam,您告诉框架配置将放在 JavaBean 上,在 bean 内部您可以定义任意数量的参数,不仅是查询参数,如果需要,您可以包括 Header、Path 和 Form 参数(使用适当的方法POST、PUT 等)

于 2021-10-21T20:05:05.903 回答