我有一个奇怪的问题。我有一个根资源和一个子资源(代码如下)。
当我调用“/ team / test”时,调用以“return subResource”结束。并且子资源对象被写为响应的输出。
{
"team": {
"id": 1,
"state": 1,
"name": "test",
"channels": []
}
}
当我调用“/ team / test / name”时,我收到404响应,并在服务器日志中打印此消息:
WARNUNG: No operation matching request path "/ts-webservice-dev/rest/team/test/name" is found, Relative Path: /test/name, HTTP Method: GET, ContentType: */*, Accept: */*,. Please enable FINE/TRACE log level for more details.
我的应用程序服务器是使用apache cfx jax-rs实现的。 我在另一台机器上有另一个具有非常相似代码的应用程序,并且它在那里正常工作。不幸的是,我既不能在另一台机器上测试我当前的项目,也不能测试这台机器上的其他项目。
你能告诉我,我怎么解决这个问题?
根资源:
@Path("/team")
public class TeamResource extends BaseResource {
private TeamRepository teamRepository;
@GET
@Path("/{teamName}")
public TeamSubResource findTeam(@PathParam("teamName") String teamName) throws TeamInactiveException, TeamNotFoundException {
Optional<TeamEntity> team = teamRepository.findByName(teamName);
if (!team.isPresent()) {
throw new TeamNotFoundException(teamName);
} else if (team.get().getState() != 1) {
throw new TeamInactiveException(team.get());
} else {
TeamSubResource subResource = CDI.current().select(TeamSubResource.class).get();
subResource.setTeam(team.get());
return subResource;
}
}
@Inject
public void setTeamRepository(TeamRepository teamRepository) {
this.teamRepository = teamRepository;
}
}
子资源:
public class TeamSubResource {
private TeamEntity team;
@GET
@Path("/")
public String test1() {
return "test1";
}
@GET
@Path("/test")
public String test2() {
return "test2";
}
@GET
@Path("/name")
public String name() {
return team.getName();
}
public void setTeam(TeamEntity team) {
this.team = team;
}
public TeamEntity getTeam() {
return team;
}
}
答案 0 :(得分:0)
第二天用新鲜的眼睛看着它后,我发现了问题。
需要删除子资源定位器上的@GET注释。