Swagger: How to stub REST service with Java code/annotations
Greetings, All!
I'm using Swagger in my Java project.
And I've got REST service, Java method with Swagger annotations: (some data removed)
@GET @Path("/data-by-district/{authtoken}/{country}/{districtid}") @ApiImplicitParams({ @ApiImplicitParam( name = "authtoken", dataType = "string" ), @ApiImplicitParam( name = "country", dataType = "string" ), @ApiImplicitParam( name = "districtid", dataType = "long" ) }) @ApiOperation(value = "...", notes = "...") public MyObject getData(@PathParam("authtoken") String authtoken, @PathParam("country") String country, @PathParam("districtid") Long districtId) { ...
MyObject is actually the JPA Bean with nested objects/lists, etc. It works perfectly for receiving and sending back information. I've got Swagger annotations as well for my method and Swagger UI works as expected.
My question is: how can I easily stub this my method, so that UI developers could get a response like this:
{ //This is "MyObject "id": "3567", //random number "name": "random-string1", "someNestedJpaObject": { "id": "123", //random number "position": "random-string2", "code":"random-string3", "myclassifier": { "key": "random-string4" } } }
Swagger - is a part of my application (Maven dependency).
So, I assume, it knows the structure of my (JPA) class and types of all fields.
Can I get something like mentioned above - a "quick" instance of MyObject, filled with random data?
I looked through all the "swagger code generators" around, but it looks like huge overkill in this case: I've already got swagger annotations (I can add an extra ones, if needed), data containers and types, but all the "stub-frameworks" wants me to create YAML files with a lot of information regarding the mock data...
I believe I don't need this extra work(yaml code), - I've got all the necessary info in Java code...no?!
This pice of code might be helpful for your question.
@GET @Path("/findByStatus") @ApiOperation(value = "Finds Pets by status", notes = "Multiple status values can be provided with comma seperated strings", response = Pet.class, responseContainer = "List") public Response findPetsByStatus(...) { ... }
In the response parameter you can put a class, in your case: MyObject.class.
You can also add metadata to your model, with the @ApiModelProperty annotation, in class and parameters level.@ApiModel(value="DifferentModel", description="Sample model for the documentation") class OriginalModel {...}
@ApiModelProperty(value = "pet status in the store", allowableValues = "available,pending,sold") public String getStatus() { return status; }
You can see other useful annotations in this link: Wiki Annotations
I hope this info can help you to solve your doubts and don't hesitate in ask again if this doesn't work for you.
Have a nice day!