gpt4 book ai didi

java - 如何将url参数绑定(bind)到jax-rs中的 Controller 参数对象

转载 作者:行者123 更新时间:2023-11-30 10:40:10 28 4
gpt4 key购买 nike

我必须将 Spring Pageable 对象注入(inject)到 @GET 注释处理程序中,当用户查询 /rest/data?page=1&limit=20 时根据本指南使用参数

http://docs.spring.io/spring-data/rest/docs/2.0.0.M1/reference/html/paging-chapter.html

@GET
@Path("/rest/data")
@Produces({MediaType.APPLICATION_JSON + "; charset=UTF8"})
public List<SanomalokiDTO> getData(Pageable pageable) {
return service.getData(pageable);
}

但是,我得到以下错误

SEVERE: No message body reader has been found for class org.springframework.data
.domain.Pageable, ContentType: application/octet-stream
elo 19, 2016 12:06:24 IP. org.apache.cxf.jaxrs.impl.WebApplicationExceptionMappe
r toResponse
WARNING: javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.
java:1315)
...

我尝试向处理程序添加 @Consumes({MediaType.APPLICATION_OCTET_STREAM}) 注释,但仍然出现相同的错误。似乎 jax-rs 正在尝试从空消息体而不是 url 参数构建对象。如何将可分页对象绑定(bind)到这些参数并注入(inject)它,而不必注入(inject) @RequestParam 并手动构建它?

最佳答案

您必须使用 BeanParam 注释可分页参数注解。然后在 Pageable 中,您必须使用 QueryParam 注释您的字段

所以像这样:

@GET
@Path("/rest/data")
@Produces({MediaType.APPLICATION_JSON + "; charset=UTF8"})
public List<SanomalokiDTO> getData(@BeanParam Pageable pageable) {
return service.getData(pageable);
}

还有你的 Pageable 类:

public class Pageable {
@QueryParam("page")
private Integer page;
@QueryParam("limit")
private Integer limit;
...
}

如果您无法控制 Pageable 类,您可以按以下方式解决:

public class PageableBuilder {
@QueryParam("page")
private Integer page;
@QueryParam("limit")
private Integer limit;
...

public Pageable build() {
//create Pageable object
}
}

在资源中:

@GET
@Path("/rest/data")
@Produces({MediaType.APPLICATION_JSON + "; charset=UTF8"})
public List<SanomalokiDTO> getData(@BeanParam PageableBuilder pageableBuilder) {
return service.getData(pageableBuilder.create());
}

关于java - 如何将url参数绑定(bind)到jax-rs中的 Controller 参数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39035431/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com