Jax-RS - 子资源对象被写入输出

时间:2017-02-18 16:16:06

标签: java rest jax-rs

我有一个奇怪的问题。我有一个根资源和一个子资源(代码如下)。

当我调用“/ 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;
}
}

1 个答案:

答案 0 :(得分:0)

第二天用新鲜的眼睛看着它后,我发现了问题。

需要删除子资源定位器上的@GET注释。