我有一个Spring Data Rest webmvc应用程序,我想为批处理操作添加一些自定义功能。
我已经创建了一个控制器,并将其混合到uri命名空间中,但是我希望它能够像自定义/search
查询一样接受URI ,而不仅仅是ID。
我尝试注册一个自定义<String, Long>
转换器(我的实体具有Long
ID类型,但是似乎被忽略了。是否可以通过任何方式配置我的控制器,使其采用自动实现的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。
感谢帮助!
忘了提
使用JPA储存库
事实证明,我在添加转换器方面步入正轨,不幸的是,我使用的配置方法错误。
通过将testConverter()
bean移至RepositoryRestMvcConfiguration
扩展配置类,然后添加,我能够获得所需的功能。
@Override
public void configureConversionService(ConfigurableConversionService service) {
service.addConverter(testConverter());
}
并按预期工作。我现在觉得将它放在错误的位置会有点傻,但是希望这可以帮助其他人!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句