【发布时间】:2018-11-09 10:19:28
【问题描述】:
我的目标是在不创建自己的控制器的情况下向 Spring Data REST API 添加自定义便捷方法。
根据文档here,我已通过以下方式扩展PagingAndSortingRepository:
存储库:
@RepositoryRestResource
public interface PartyRestRepository extends PagingAndSortingRepository<Party, String>, CustomPartyRestRepository {
}
与我的方法的接口:
public interface CustomPartyRestRepository {
void dynamicPartyCreation(final String name);
}
实施:
public class CustomPartyRestRepositoryImpl implements CustomPartyRestRepository {
@Autowired
private PartyService partyService;
@Autowired
private PartyRepository partyRepository;
@Autowired
private HeroService heroService;
@Override
public void dynamicPartyCreation(final String name) {
final Party party = this.partyService.createParty(name);
final List<Hero> heroes = IntStream.range(0, 3)
.mapToObj(i -> this.heroService.createHero(String.format("Hero %d for %s", i, name)))
.collect(Collectors.toList());
party.setMembers(heroes);
this.partyRepository.save(party);
}
}
当我执行GET localhost:8080/profile/parties/ 时,我看到 Spring 已经采用了我的方法并正在公开它:
<...cut...>
{
"name": "dynamicPartyCreation",
"type": "SAFE"
}
<..cut..>
但我似乎无法使用它。 GET localhost:8080/parties/dynamicPartyCreation/ 导致 404,POST 也是如此,有无正文,有无查询参数。 PUT 只是创建一个派对并忽略 url 的 /parties/dynamicPartyCreation/ 部分(意思是,我的方法没有被调用)。我已经尝试了一百万种组合,但我无法使用它。
我做错了什么?
【问题讨论】:
-
您能否分享您的控制器详细信息,从您调用 localhost:8080/profile/parties/ 和 GET localhost:8080/parties/dynamicPartyCreation/
-
这个是spring data rest提供的,我没有实现任何控制器
-
这是一个非常奇怪的解决方案。您试图用这段代码解决的问题到底是什么?难道这不能通过 SDR 事件系统更轻松地处理吗? baeldung.com/spring-data-rest-eventsSpring 数据休息
-
这是一个普通的旧 spring data rest api。为方便起见,应该公开额外的端点,这些端点可以一次性执行常见的操作序列。在本例中,创建一个附有四个英雄的队伍,从而将 9 个呼叫减少为一个)。
标签: spring-boot spring-data-rest