Ответ 1
Интерфейс был правильным все время
Не могу поверить, что это было легко:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") String second);
}
Обратите внимание на что-то другое, чем на интерфейс вопросов? Неа. Это потому, что это ответ!
Не используйте @DefaultValue
Если вы хотите по умолчанию указать параметр для определенного значения, вы используете аннотацию @DefaultValue
в параметре:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") @DefaultValue("default") String second);
}
Передать null
в @QueryParam
, который вам не нужен
Если вы хотите сделать @QueryParam
необязательным, вы не применяете аннотацию @DefaultValue
.. Чтобы передать значение с помощью параметра запроса, просто перейдите в значение как обычно. Если вы хотите, чтобы параметр запроса вообще не отображался, просто перейдите null
!
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
// Pass null to this parameter to not put it in the GET request
@QueryParam("queryB") String second);
}
Таким образом, вызов ServiceInterface.getEndpoint("firstQueryParam", "secondQueryParam");
вызывает:
http://targethost.com/service/endpoint?queryA=firstQueryParam&queryB=secondQueryParam
и вызов ServiceInterface.getEndpoint("firstQueryParam", null);
:
http://targethost.com/service/endpoint?queryA=firstQueryParam
И стена! Нет второго параметра запроса!:)