2017-02-18 2 views
0

У меня есть странная проблема. У меня есть корневой ресурс и вспомогательный ресурс (код ниже).Jax-RS - объекты вспомогательных ресурсов записываются на вывод

Когда я называю «команда/тест», вызов заканчивается на «return subResource»; и объект вспомогательного ресурса записывается как результат в ответ.

{ 
    "team": { 
    "id": 1, 
    "state": 1, 
    "name": "test", 
    "channels": [] 
    } 
} 

Когда я называю «/ команда/тест/имя» я получаю ответ 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. 

Мой сервер приложений является tomee с 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; 
} 
} 

Sub Ресурс:

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

После того как я посмотрел на него на следующий день со свежими глазами, я нашел эту проблему.

Аннотацию @GET в локаторе субресурсов необходимо удалить.

Смежные вопросы