我正在尝试实现自定义控制器,以处理在自定义存储库中定义的方法,从而能够通过REST公开使用此方法的资源(根据 实现Spring Data存储库的自定义方法并通过REST公开它们)。以下是配置和其他相关代码:
基于使用的存储库自动生成的链接所公开的所有资源都可以无障碍地访问。但是,在http://localhost:8080/app/api/experiments/search/findByFilter?id=1调用GET方法时,返回404错误(基于使用的存储库自动生成的链接所公开的资源工作正常)。我认为ExperimentController未在Spring容器中注册,或者我缺少有关控制器方法的其他设��。有什么建议吗?
提前致谢!
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] {ApplicationConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] {RepositoryRestMvcConfiguration.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/api/*"};
}
}
应用配置:
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
public class ApplicationConfig {
@Bean
public DataSource dataSource() {
// data source settings
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// em factory settings
}
@Bean
public PlatformTransactionManager transactionManager() {
// tx mng settings
}
}
实验仓库:
@RepositoryRestResource
public interface ExperimentRepository extends PagingAndSortingRepository<Experiment, Long>,
ExperimentRepositoryCustom {
@RestResource(rel = "byName", path = "byName")
Page<Experiment> findByNameContaining(@Param("name") String name, Pageable pageable);
}
ExperimentRepositoryCustom:
public interface ExperimentRepositoryCustom {
Page<Experiment> findUsingCustomFilter(...);
}
实验仓库实现:
public class ExperimentRepositoryImpl implements ExperimentRepositoryCustom {
@Override
public Page<Experiment> findUsingCustomFilter(...) {
// search for experiment based on given filter
}
}
实验控制器:
@RepositoryRestController
public class ExperimentController {
@Autowired
private ExperimentRepository experimentRepository;
@RequestMapping(value = "/experiments/search/findByFilter", method= RequestMethod.GET)
@ResponseBody
public ResponseEntity<Experiment> searchUsingFilter(@RequestParam Long id) {
// for test purpose call method from CrudRepository (will be replaced by findUsingCustomFilter(...))
return new ResponseEntity(experimentRepository.findOne(id), HttpStatus.OK);
}
}
项目结构:
basepackage.model.Experiment
basepackage.repository.ExperimentController
basepackage.repository.ExperimentRepository
basepackage.repository.ExperimentRepositoryImpl
basepackage.repository.ExperimentRepositoryCustom
basepackage.ApplicationInitializer
basepackage.ApplicationConfig
基于使用的存储库自动生成的链接所公开的所有资源都可以无障碍地访问。但是,在http://localhost:8080/app/api/experiments/search/findByFilter?id=1调用GET方法时,返回404错误(基于使用的存储库自动生成的链接所公开的资源工作正常)。我认为ExperimentController未在Spring容器中注册,或者我缺少有关控制器方法的其他设��。有什么建议吗?
提前致谢!