spring - 从@PathVariable DomainObject 到字符串的转换器? (使用 ControllerLinkBuilder.methodOn)

标签 spring spring-mvc controller converter spring-hateoas

我正在尝试调用 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/

相关文章:

java - [spring][jsp] css文件问题

java - Spring MVC 安全 API 问题

javascript - 尝试通过 Angular Controller 和工厂访问json服务器数据

c# - mvc中只能使用赋值、调用、自增、自减、new对象表达式作为语句

Spring+JSP url构建最佳实践

spring - 为什么我们在 Spring MVC 中使用重定向?

java - 无法加载请求的类: org. hibernate.MySQL5InnoDBDialect

java - Dockerfile 中的 Docker-machine ip

spring-mvc - Spring MVC中的可选POST参数?

php - 使Laravel 8 Slug变量不区分大小写