我看到您
ObjectMapper在
JsonProvider构造函数中创建但从未使用过。您可能应该
setMapper(mapper);在构造函数的最后使用JsonProvider。
但是我认为这不会解决您的问题。我认为问题在于jaxrs仅了解简单的数据类型,如果您要使用自定义类,则必须为基于String的字符串实现某种形式的String编组
@*Param
从您的stacktrace中,我看到您使用
jboss,所以这可能会有所帮助?https://docs.jboss.org/resteasy/docs/3.0.12.Final/userguide/html/StringConverter.html
如果您有一个valueOf()或此字符串构造函数不存在或不适合HTTP请求的类,该怎么办?JAX-RS
2.0具有javax.ws.rs.ext.ParamConverterProvider可以在这种情况下提供帮助。有关更多详细信息,请参见javadoc。
https://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/ParamConverterProvider.html
这样的事情可能应该起作用:
@Providerpublic class MoneyConverterProvider implements ParamConverterProvider { private final MoneyConverter converter = new MoneyConverter(); @Override public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) { if (!rawType.equals(Money.class)) return null; return (ParamConverter<T>) converter; } public class MoneyConverter implements ParamConverter<Money> { public Money fromString(String value) { if (value == null ||value.isEmpty()) return null; // change this for production return Money.of(CurrencyUnit.EUR, Double.parseDouble(value)); } public String toString(Money value) { if (value == null) return ""; return value.getAmount().toString(); // change this for production } }}


