バッチ処理のためにカスタム機能を追加したいSpring Data Rest webmvcアプリケーションがあります。カスタムコントローラでのSpringデータのREST URIの受け入れ
私はコントローラを作成してそれをuri名前空間にブレンドしましたが、単純なIDではなくカスタム/search
のようなURIを受け入れることができるようにしたいと思います。
カスタム<String, Long>
コンバータを登録しようとしました(私のエンティティはLong
IDタイプですが、無視されるようです)
方法のいくつかの並べ替えがあっても、私は同じようにうまく機能エンティティにその意志自動解決URIを呼び出すことができます(私は、単に私のコントローラでString
を受け入れることができるよう)
ここです私はどこにいるのですか。
@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が正しく、私は周りを見回してきた
@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);
}
}
魔法リポジトリSDR /によって管理されている私のエンティティの一つでありますかなりのビットですが、何かを動作させることはできません。私はリポジトリを利用<String, ApplicationType>
コンバータを作成すると、それは正しく長いにtypes/1
を解析することができないようDomainClassConverterはちょうどその基礎となる<String, Long>
コンバータ(明らかに失敗し、呼び出すように、それはまた、呼び出されません。
助けに感謝!
春HATEOAS 0.19.0
- 春データ休息2.4.0
- を言及するのを忘れました.2.1
使用JPAリポジトリ
コントローラに@RepositoryRestControllerを注釈付けしましたか?実際、通常のコントローラのPathVariablesからSDRエンティティを自動取得するのに問題はありませんでしたが、私はSpring Bootを使用しています。これにはいくつかの自動設定が含まれています。 –
私はそれを与えるだろう、ありがとうイリーヤ! – CollinD
@IlyaNovoseltsev残念ながらサイコロはありません。私はそれを 'GET domain.com/api/applications/batch/removeType?type = types/7'のように照会できるようにしたいと思っていますが、まだエラーを変換できません。 – CollinD