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

标签 java spring rest model-view-controller jax-rs

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

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/

相关文章:

java - Jersey、osgi 和 Servlet 上下文 3.x

java - java中Jtable到TextArea

java - Spring数据mongo在Query中使用OR

java最佳实践——内部类访问外部类静态变量

java - Spring-Boot 应用程序中未保留时区更改

java - spring mvc 声明所有 beans 单例

java - 我的基于 logback java(无 xml)的配置被忽略

rest - 如何通过rancher REST api将容器添加到堆栈中的服务

API访问多种资源的REST设计

php - Bootstrap 3.3.1 : Btn-group with RESTful Delete and Patch Buttons not connecting smoothly