在自定义控制器中接受Spring Data REST URI

科林

我有一个Spring Data Rest webmvc应用程序,我想为批处理操作添加一些自定义功能。

我已经创建了一个控制器,并将其混合到uri命名空间中,但是我希望它能够像自定义/search查询一样接受URI ,而不仅仅是ID。

我尝试注册一个自定义<String, Long>转换器(我的实体具有LongID类型,但是似乎被忽略了。是否可以通过任何方式配置我的控制器,使其采用自动实现的SDR控制器的行为?

即使我可以调用某种可以自动将URI解析为实体的方法,其效果也一样好(因为我可以String在控制器中简单地接受a

这就是我的位置。

@Configuration
public class CustomWebConfiguration extends WebMvcConfigurationSupport {

    //irrelevant code omitted

    @Bean
    public DomainClassConverter<?> domainClassConverter() {
        DomainClassConverter<FormattingConversionService> dc = new DomainClassConverter<FormattingConversionService>(mvcConversionService());
        return dc;
    }

    @Override
    public void addFormatters(FormatterRegistry registry) {
          registry.addConverter(String.class, Long.class, testConverter());
    }

    @Bean 
    Converter<String, Long> testConverter() {
        return new Converter<String, Long>() {

            @Override
            public Long convert(String source) {
                //this code does _not_ get run at any point
                if (source.indexOf('/') == -1) { return Long.parseLong(source); }

                source = source.substring(source.lastIndexOf('/') + 1);
                Long id = Long.parseLong(source);

                return id;
            }   
        };
    }
}

SDR配置

@Configuration
@EnableHypermediaSupport(type = { HypermediaType.HAL })
public class CustomRestConfiguration extends RepositoryRestMvcConfiguration {

    @Override
    public RepositoryRestConfiguration config() {
      RepositoryRestConfiguration config = super.config();
      config.setBasePath("/api");
      config.exposeIdsFor(ApplicationMembership.class);
      return config;
    }


}

和我的(人为的)控制器:

ApplicationType是我的由SDR /存储库魔术正确管理的实体之一

@BasePathAwareController
@RepositoryRestController
@RequestMapping("applications/special")
public class ApplicationExtensionController {
    @RequestMapping("a")
    public ResponseEntity<?> reply(@RequestParam("type") ApplicationType type) {
        return new ResponseEntity<String>(type.getIcon(), HttpStatus.OK);
    }
}

我环顾了四周,但无法使任何工作正常进行。当我创建一个<String, ApplicationType>使用该存储库转换器时,它也不会被调用,因为DomainClassConverter只会调用其基础<String, Long>转换器(显然失败了,因为它无法正确解析types/1为long。

感谢帮助!

忘了提

  • Spring Data Rest 2.4.0
  • 春季HATEOAS 0.19.0
  • 春天4.2.1

使用JPA储存库

科林

事实证明,我在添加转换器方面步入正轨,不幸的是,我使用的配置方法错误。

通过将testConverter()bean移至RepositoryRestMvcConfiguration扩展配置类,然后添加,我能够获得所需的功能。

@Override
public void configureConversionService(ConfigurableConversionService service) {
    service.addConverter(testConverter());
}

并按预期工作。我现在觉得将它放在错误的位置会有点傻,但是希望这可以帮助其他人!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data Rest:如何在HAL浏览器中公开自定义Rest控制器方法

Spring Data Rest / Spring Hateoas自定义控制器-PersistentEntityResourceAssembler

使用Spring Data REST的自定义控制器隐藏默认端点

如何在自定义Spring Data Rest控制器中正确处理POST?

使用Spring Data Rest @Projection作为自定义控制器中资源的表示

Spring DATA REST-如何使用默认的Spring实现在自定义控制器中将实体转换为资源

在Spring Data Rest中检索实体的URI和Collection Rel

Spring Data Rest自定义参数解析器

如何在Spring Data Rest中添加自定义拦截器(spring-data-rest-webmvc 2.3.0)

根请求的自定义响应通过RepositoryRestResource-s和常规控制器在Spring REST HATEOAS中

如何将Spring REST Projections与自定义控制器一起使用

Spring Boot Rest控制器未将请求主体转换为自定义对象

Spring REST响应在自定义控制器中有所不同

Spring Boot-自定义Rest控制器异常处理HTTP状态

如何在Spring Data REST存储库中创建唯一的URI?

Spring Data Rest Override存储库(控制器与AOP)

在Spring Boot 2.3中重现Spring Data Rest搜索控制器

找不到带有Spring Data Rest的URI的HTTP请求的映射

Spring Data Rest Mongo-如何使用ID而不是URI创建DBRef?

Spring Data Rest,SpringFox和JpaRepository自定义查找器

Spring Data Rest - 自定义端点名称

自定义Spring Data Rest @ManyToMany关系处理

Spring Data REST:自定义方法验证

Spring Data REST自定义查询集成

资源上的Spring Data Rest自定义链接

使用 Spring Data Rest 抛出自定义异常

Spring REST服务-设置根URI

将自定义路由添加到Zend REST控制器

具有Spring Data Rest功能的自定义Spring MVC HTTP补丁请求