Сообщить об ошибке во время вызова, когда в аннотированной службе JAX-RS поддерживается полный CRUD - PullRequest
0 голосов
/ 01 марта 2011

Я столкнулся с довольно интересной ошибкой изложения:

"Допускается не более одного параметра сущности JAX-RS (все остальные параметры должны быть аннотированы одной из аннотаций параметров ресурса JAX-RS). "

Я использую enunciate для создания API SOAP и REST, поддерживающих XML и JSON.Enunciate настроен на использование всех классов service. * И service.impl. *.Каждый сервис содержит весь Javadoc для документации документации, а также аннотацию [@GET @POST @PUT @DELETE] и @Path.Каждая служба impl содержит аннотацию класса @Path.

Пример интерфейса:

public interface myService {

  @GET
  @Path("/something")
  Object doGetAll();

  @GET
  @Path("/something/{id}"
  Object doGetOne(@PathParam("id") Integer id);

  @PUT
  @Path("/something")
  Object doCreate(/*params*/);

  @POST
  @Path("/something/{id}")
  Object doUpdate(@PathParam("id") Integer id, /*params*/);

  @DELETE
  @Path("/something/{id}")
  Object doDelete(@PathParam("id") Integer id);
}

Пример реализации:

@Path("/base")
public class myServiceImpl implements myService {

  Object doGetAll() {/*stuff*/}

  Object doGetOne(Integer id) {/*stuff*/}

  Object doCreate(/*params*/) {/*stuff*/}

  Object doUpdate(Integer id, /*params*/) {/*stuff*/}

  Object doDelete(Integer id) {/*stuff*/}
}

Когда я закомментирую "@POST" и«@PUT» аннотации в моем сервисе enunciate будут работать нормально.Тем не менее, комментирование обратно не приведет к сообщению выше.Суть в том, что у меня есть сервисы, которые охватывают 2-8 различных моделей (пример: мой addressService включает в себя 3 объекта: адрес, штат и страну), поэтому я указал контексты пути (используя адрес) следующим образом:

при условии:

@Path("/address")
public class myAddressServiceImpl implements myAddressService {}

о методах:

@GET
@Path("/{id}")
findAddressById();

@GET
@Path("/states/{id}")
findStateById();

@GET
@Path("/countries/{id}")
findCountryById();

Если бы я мог предоставить больше информации, я был бы рад.Это была довольно неприятная проблема, потому что я не уверен, неправильно ли настроил enunciate (сомнительно, это базовая конфигурация) или я растягиваю то, что может сделать JAX-RS.Я потратил много времени на чтение учебников, поиск в Google и просмотр Javadoc (для enunciate и JAX-RS), но мне не повезло.

Кто-нибудь еще видел эту проблему?Любые мысли о том, что я мог бы сделать, чтобы это исправить?У меня такое ощущение, что это будет одно из тех исправлений "без духа" ... просто не могу на это обратить внимание.

Заранее спасибо за помощь.

1 Ответ

4 голосов
/ 02 марта 2011

«Параметр сущности» - это параметр, который указывается в теле запроса REST. Другими словами, тело запроса читается, и делается попытка десериализации его в объект вашего типа параметра, а затем вызывается запрос.

Поскольку может быть только одно тело, может быть только один параметр сущности.

Другие параметры должны быть аннотированы @QueryParameter, @PathParameter и т. Д.

Итак, что действительно пытается сказать это сообщение об ошибке: «Для всех методов, аннотированных @POST и @PUT, вы можете иметь только один параметр, который не аннотируется какой-либо аннотацией. Все остальные параметры должны иметь параметр аннотация. "

...