Как заставить Enunciate отображать мой тип данных как структурированный JSON (а не как пользовательский)?

У меня есть эта простая служба, которая повторяет параметр ID, завернутый в объект JSON:

@Path("job")
public class JobResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("{id}")
    public Job readById(@PathParam("id") long id) {
        Job j = new Job();
        j.id = id;
        return j;
    }

}

Класс возвращаемого значения Job объявлен как:

public class Job {
    public long id;
}

В документации, созданной с помощью Enunciate, тип данных службы указан как «пользовательский». Возможно ли, чтобы Enunciate выдавал более подробное объяснение возвращаемого типа, например представление JSON?


person Carl    schedule 30.12.2015    source источник


Ответы (3)


Если вы измените тип возвращаемого значения на javax.ws.rs.core.Response, документация должна показать тип данных как JSON.

Вам нужно будет немного изменить свой метод, как:

...
return Response.status(Status.OK).entity(j).build();
person Egemen    schedule 16.02.2016

Добавьте аннотацию к классу Job

@javax.xml.bind.annotation.XmlRootElement

Без этой аннотации объявление будет отображать DTO как «пользовательский» или «файл».

person Megan D    schedule 03.02.2017

У меня точно такая же проблема с простым веб-сервисом REST Jersey.

Вот аннотации моего возвращенного объекта (не более):


    @XmlRootElement(name = "OReponseInitialiser")
    @XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
    @XmlType (name="OReponseInitialiser")
    public class OReponseInitialiser

И объявление веб-сервиса:


      @POST
      @Consumes(MediaType.APPLICATION_JSON)
      @Produces(MediaType.APPLICATION_JSON)
      @Path ("initialiser")
      public OReponseInitialiser initialiser(@Context HttpServletRequest pRequete,  ...) throws OException

Я создаю документацию с помощью задачи ant

<enunciate 
    basedir="${projet.repertoire}/src"
    buildDir="${enunciate.working.dir}"
    javacSourceVersion="1.8"
    javacTargetVersion="1.8"
    configFile="${projet.repertoire}/build_enunciate.xml"
    >
  <include name="**/*.java"/>
  <classpath refid="compile.classpath"/>
  <export artifactId="docs" destination="${docs.dir}"/>
</enunciate>
person Nicolas    schedule 16.06.2017