我正在尝试调用 Spring 的 ControllerLinkBuilder.methodOn()
使用非 String 类型,它总是失败。而我不知道是哪种Converter
使用以及在哪里注册。
这是我的 Controller :
@RestController
@RequestMapping("/companies")
class CompanyController {
@RequestMapping(value="/{c}", method=RequestMethod.GET)
void getIt(@PathVariable Company c) {
System.out.println(c);
Link link = linkTo(methodOn(getClass()).getIt(c));
}
}
System.out.println(c)
效果很好。我的 Company
从数据库中获取域对象。 (我正在使用 DomainClassConverter
)但另一种方式不起作用:
ConverterNotFoundException: No converter found capable of converting from type @PathVariable Company to type String
我只需要一个
Converter<Company, String>
?我应该在哪里注册?我在 addFormatters(FormatterRegistry registry)
中尝试了一些东西WebMvcConfigurationSupport
的方法,但它确实显示了相同的错误。但毕竟我不确定我到底尝试了什么......
最佳答案
我有同样的问题,它是 bug .如果您不想在每个 Controller 上进行复制和粘贴,您可以在 WebMvcConfigurationSupport
中尝试类似的操作。 .这个对我有用。
@Override
public void addFormatters(final FormatterRegistry registry) {
super.addFormatters(registry);
try {
Class<?> clazz = Class.forName("org.springframework.hateoas.mvc.AnnotatedParametersParameterAccessor$BoundMethodParameter");
Field field = clazz.getDeclaredField("CONVERSION_SERVICE");
field.setAccessible(true);
DefaultFormattingConversionService service = (DefaultFormattingConversionService) field.get(null);
for (Converter<?, ?> converter : beanFactory.getBeansOfType(Converter.class).values()) {
service.addConverter(converter);
}
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
关于spring - 从@PathVariable DomainObject 到字符串的转换器? (使用 ControllerLinkBuilder.methodOn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240155/