2013-08-07 2 views
1

Я использую Enunciate для создания документации для моих служб Restaasy. Я могу генерировать необходимую документацию, но у меня есть проблема с некоторыми пользовательскими параметрами.Указать пользовательскую аннотацию @QueryParam

Наш сервисный интерфейс состоит из пользовательской аннотации @QueryParam, которая используется для отображения всех параметров запроса поддержки реализации метода. Теперь я не хочу объяснять, почему мы решили создать пользовательский @QueryParam, это было просто архитектурное решение.

Несмотря на все, теперь Enunciate не признает пользовательский @QueryParam, поэтому все мои методы Resteasy не имеют параметров @QueryParam (только @PathParam).

интерфейс Sample службы:

@GET 
@Path("{regionId}/{userId}/validate-access") 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
@QueryParams(uniqueName = "validatePin", params = { 
     @QueryParam(param = Param.PIN, isRequired = true), 
     @QueryParam(param = Param.PIN_TYPE, isRequired = false, valueSet = { "valueA", "valueB" }, defaultValue = "valueA") }) 
StatusResponseResult validatePin(@Context HttpServletRequest hsr, @PathParam("regionId") int regionId, 
     @PathParam("userId") int userId, @Context UriInfo info) throws RestApiException; 

Реализация класса @QueryParam:

@Retention(RetentionPolicy.RUNTIME) 
public @interface QueryParam { 
    public Param param(); 
    public boolean isRequired() default false; 
    public boolean canBeEmpty() default true; 
    public String defaultValue() default ""; 
    public String minValue() default ""; 
    public String maxValue() default ""; 
    public String format() default ""; 
    public String[] valueSet() default {}; 
} 

Реализация класса @QueryParams:

@Retention(RetentionPolicy.RUNTIME) 
public @interface QueryParams { 
    String uniqueName(); 
    QueryParam[] params(); 
} 

Есть ли способ сказать Enunciate принять во внимание также мой пользовательский @QueryParam при создании документации HTML?

ответ

0

Возможно, вы попытаетесь использовать аннотацию @ResourceMethodSignature, чтобы явно указать Enunciate, что пытается этот метод. More info here.

Вы могли бы попробовать применять как @QueryParams аннотацию и@QueryParam аннотаций.

Если ни одна из этих работ не работает, единственное, что я могу придумать, - создать пользовательский модуль Enunciate, который настроит модель, которую пытается объявить аннотация для пользовательских объявлений @QueryParams. More (but not much) info here.

+0

Ссылка повреждена, и теперь она указывает на https://github.com/stoicflame/enunciate/wiki/No-JAX –

0

ОК, с @ResourceMethodSignature Я могу получить все параметры (запрос и путь) в документации. Единственным недостатком является то, что мне нужно снова перечислить параметры внутри @ResourceMethodSignature. Если вы забыли обновить @ResourceMethodSignature при добавлении новых параметров (или удалены), документация будет несинхронизирована.

Пример:

@ResourceMethodSignature(
     pathParams = { @PathParam("regionId"),@PathParam("userId") }, 
     queryParams = { @javax.ws.rs.QueryParam("pin"), 
         @javax.ws.rs.QueryParam("pin_type") } 
) 

Когда вы "читать" все @ javax.ws.rs.QueryParam вы думаете, вы могли бы рассмотреть и другие аннотации?

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