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
Другие вопросы по тегам