JAX-RS: двойной проход @PathParam
Я хотел бы передать параметры двойного пути, такие как 5, 5,0, 0,5, 3,5, 3,65 и т. Д.
Поэтому я делаю такой метод на ресурсе JAX-RS:
@GET
@Path("/rated-above/{minAvgRating : \\d+(\\.\\d+)? }")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getProvidersOnAverageRatedAbove( @PathParam("minAvgRating") Double minAvgRating,
@BeanParam PaginationBeanParam params) throws ForbiddenException {
// method
}
Но этот метод, кажется, не работает правильно даже без шаблона регулярных выражений.
Caused by: org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: pl.salonea.jaxrs.utils.ErrorResponseWrapper of media type: application/octet-stream
at org.jboss.resteasy.core.ServerResponseWriter.writeNomapResponse(ServerResponseWriter.java:67)
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:153)
ОБНОВИТЬ
Извините, без регулярного выражения это работает правильно, есть некоторая проблема с регулярным выражением \d+(\.\ D +)? Я также пытался использовать: [0-9] + (\. [0-9] +)? и просто \ S + (не пробел)
1 ответ
Попробуйте использовать BigDecimal
вместо Double
например,
@GET
@Path("/rated-above/{minAvgRating}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getProvidersOnAverageRatedAbove(@PathParam("minAvgRating") BigDecimal minAvgRating, @BeanParam PaginationBeanParam params) throws ForbiddenException {
Double myDouble = Double.valueOf(minAvgRating.toString());
// .. and then use myDouble