swagger for jersey2
Problem statement : We have jersey2(glassfish) RESTFul web services which return application/xml as a response. Now we need to enable swagger into web services.
In the example post, we will first do quick setup of plan hello world web service using jersey2 and later explain steps to enable swagger.
In the web service example, we have two http methods GET & POST in the REST resource.
I am using jetty-distribution-9.2.2.v20140723 as a server to deploy services.
1. Code for Get & Post REST resources :
package com.test.my;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/helloWorldREST")
public class HelloWorldREST {
@GET
@Path("/{xyz}")
@Produces(MediaType.APPLICATION_XML)
public Response responseMsg(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Friend, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
@POST
@Path("/{xyz}")
@Produces(MediaType.APPLICATION_XML)
public Response responseMsgPost(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Friend, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
}
2. web.xml : Below are the necessary addition in web.xml as per need of jersey2.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Restful Web Application</display-name>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.my</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
3. pom.xml : Necessary maven dependencies for Jersey2.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Swagger-Test1</groupId>
<artifactId>Swagger-Test1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Swagger-Test</name>
<packaging>war</packaging>
<description>Swagger-Test1</description>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.17</version>
</dependency>
</dependencies>
</project>
Deploy war file Swagger-Test1.war into jetty server at below location.
jetty-distribution-9.2.2.v20140723\jetty-distribution-9.2.2.v20140723\webapps
Start the server.
4. REST URL :
Hit the rest end point.
http://localhost:8080/Swagger-Test1/helloWorldREST/1234?abc=2344
Out ]put :
<letter>Dear Friend, Keep up the good work!</letter>
We are happy so far, we are able to run our web services.
But what to do to quickly setup swagger for above example which are producing content-type as application/xml.
Here are steps to activate swagger on above example :
we will be creating another web project to host swagger documentation, we can also do in same project as well.
1. Download swagger ui from git hub master branch.
https://github.com/swagger-api/swagger-ui
2. Copy all swagger ui code from swagger-ui/dist folder and paste inside src/main/webapp in your web project. Let's call our swagger project as only-swagger.
3. Please note OOTB swagger ui is supporting application/json as a default content-type. Edit index.html and change application/json to application/xml at right places.
4. Now we will be generating static JSON for our web services example.
4.1 Add necessary dependencies in pom.xml.
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.0</version>
</dependency>
4.2 add entry in web.xml, please note addition of io.swagger.jaxrs.listing.
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing,com.test.my</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
4.3 Not Neccessay but add it.
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/Swagger-Test1</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
4.4. Add annotations in REST resources as explained in below example. Using these api annotations, we describe what inputs (query, header,path argument) our web services accept, what kind of exception it generate, what is the data types of each variable.
package com.test.my;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/helloWorldREST")
@Api(value = "/helloWorldREST")
public class HelloWorldREST {
@GET
@Path("/{xyz}")
@ApiOperation(value = "/{xyz}", notes = "Hello world example - java code.")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK - java code"),
@ApiResponse(code = 400, message = "Bad Request examp - java code.") })
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "xyz", dataType = "string", paramType = "path"),
@ApiImplicitParam(name = "abc", dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "my-header", dataType = "string", paramType = "header") })
@Produces(MediaType.APPLICATION_XML)
public Response responseMsg(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Daniel, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
@POST
@Path("/{xyz}")
@ApiOperation(value = "/{xyz}", notes = "Hello world example - java code.")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK - java code"),
@ApiResponse(code = 400, message = "Bad Request examp - java code.") })
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "xyz", dataType = "string", paramType = "path"),
@ApiImplicitParam(name = "abc", dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "my-header", dataType = "string", paramType = "header") })
@Produces(MediaType.APPLICATION_XML)
public Response responseMsgPost(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Daniel, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
}
4.5. Hit the end point to generate static json.
http://localhost:8080/Swagger-Test1/swagger.json
Below is the generated json you will receive.
{"swagger":"2.0","info":{"version":"1.0.0","title":""},"host":"localhost:8080","basePath":"/Swagger-Test1","tags":[{"name":"helloWorldREST"}],"schemes":["http"],"paths":{"/helloWorldREST/{xyz}":{"get":{"tags":["helloWorldREST"],"summary":"/{xyz}","description":"Hello world example - java code.","operationId":"responseMsg","produces":["application/xml"],"parameters":[{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string","default":"Nothing to say"},{"name":"my-header","in":"header","required":false,"type":"string"},{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string"},{"name":"my-header","in":"header","required":false,"type":"string"}],"responses":{"200":{"description":"OK - java code"},"400":{"description":"Bad Request examp - java code."}}},"post":{"tags":["helloWorldREST"],"summary":"/{xyz}","description":"Hello world example - java code.","operationId":"responseMsgPost","produces":["application/xml"],"parameters":[{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string","default":"Nothing to say"},{"name":"my-header","in":"header","required":false,"type":"string"},{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string"},{"name":"my-header","in":"header","required":false,"type":"string"}],"responses":{"200":{"description":"OK - java code"},"400":{"description":"Bad Request examp - java code."}}}}}}
4.6. Paste generated JSON into https://jsonformatter.curiousconcept.com/, do formatting of same.
Remove any duplicate key value.
Note :
I have removed "host":"localhost:8080","basePath":"/Swagger-Test1" and simply prepended Swagger-Test1 to url.
/Swagger-Test1/helloWorldREST/{xyz}
and I have also removed some duplicate inputs types.
We have below static json now.
"info":{
"version":"1.0.0",
"title":""
},
"tags":[
{
"name":"helloWorldREST"
}
],
"schemes":[
"http"
],
"paths":{
"/Swagger-Test1/helloWorldREST/{xyz}":{
"get":{
"tags":[
"helloWorldREST"
],
"summary":"/{xyz}",
"description":"Hello world example - java code.",
"operationId":"responseMsg",
"produces":[
"application/xml"
],
"parameters":[
{
"name":"xyz",
"in":"path",
"required":true,
"type":"string"
},
{
"name":"abc",
"in":"query",
"required":false,
"type":"string",
"default":"Nothing to say"
},
{
"name":"my-header",
"in":"header",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK - java code"
},
"400":{
"description":"Bad Request examp - java code."
}
}
},
"post":{
"tags":[
"helloWorldREST"
],
"summary":"/{xyz}",
"description":"Hello world example - java code.",
"operationId":"responseMsgPost",
"produces":[
"application/xml"
],
"parameters":[
{
"name":"xyz",
"in":"path",
"required":true,
"type":"string"
},
{
"name":"abc",
"in":"query",
"required":false,
"type":"string",
"default":"Nothing to say"
},
{
"name":"my-header",
"in":"header",
"required":false,
"type":"string"
},
{
"in":"body",
"name":"body",
"required":false,
"schema":{
"type":"string"
}
}
],
"responses":{
"200":{
"description":"OK - java code"
},
"400":{
"description":"Bad Request examp - java code."
}
}
}
}
}
}
4.7 Paste this static json in side webapp folder, we call it only-swagger. Call this json as two.json.
5 Do editing in index.html, this file delivered with swagger UI code and point url to two.json.
$(function () {
var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) {
url = decodeURIComponent(url[1]);
} else {
url = "http://localhost:8080/only-swagger2/two.json";
}
6. Deploy the new only-swagger2.war into jetty server.
7. Hit the below end point..
http://localhost:8080/only-swagger2/index.html
Swagger UI page will be display.
You can submit request form Swagger UI.
Thank you showing interest in the post !!
Problem statement : We have jersey2(glassfish) RESTFul web services which return application/xml as a response. Now we need to enable swagger into web services.
In the example post, we will first do quick setup of plan hello world web service using jersey2 and later explain steps to enable swagger.
In the web service example, we have two http methods GET & POST in the REST resource.
I am using jetty-distribution-9.2.2.v20140723 as a server to deploy services.
1. Code for Get & Post REST resources :
package com.test.my;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/helloWorldREST")
public class HelloWorldREST {
@GET
@Path("/{xyz}")
@Produces(MediaType.APPLICATION_XML)
public Response responseMsg(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Friend, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
@POST
@Path("/{xyz}")
@Produces(MediaType.APPLICATION_XML)
public Response responseMsgPost(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Friend, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
}
2. web.xml : Below are the necessary addition in web.xml as per need of jersey2.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Restful Web Application</display-name>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.my</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
3. pom.xml : Necessary maven dependencies for Jersey2.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Swagger-Test1</groupId>
<artifactId>Swagger-Test1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Swagger-Test</name>
<packaging>war</packaging>
<description>Swagger-Test1</description>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.17</version>
</dependency>
</dependencies>
</project>
Deploy war file Swagger-Test1.war into jetty server at below location.
jetty-distribution-9.2.2.v20140723\jetty-distribution-9.2.2.v20140723\webapps
Start the server.
4. REST URL :
Hit the rest end point.
http://localhost:8080/Swagger-Test1/helloWorldREST/1234?abc=2344
Out ]put :
<letter>Dear Friend, Keep up the good work!</letter>
We are happy so far, we are able to run our web services.
But what to do to quickly setup swagger for above example which are producing content-type as application/xml.
Here are steps to activate swagger on above example :
we will be creating another web project to host swagger documentation, we can also do in same project as well.
1. Download swagger ui from git hub master branch.
https://github.com/swagger-api/swagger-ui
2. Copy all swagger ui code from swagger-ui/dist folder and paste inside src/main/webapp in your web project. Let's call our swagger project as only-swagger.
3. Please note OOTB swagger ui is supporting application/json as a default content-type. Edit index.html and change application/json to application/xml at right places.
4. Now we will be generating static JSON for our web services example.
4.1 Add necessary dependencies in pom.xml.
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.0</version>
</dependency>
4.2 add entry in web.xml, please note addition of io.swagger.jaxrs.listing.
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing,com.test.my</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
4.3 Not Neccessay but add it.
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/Swagger-Test1</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
4.4. Add annotations in REST resources as explained in below example. Using these api annotations, we describe what inputs (query, header,path argument) our web services accept, what kind of exception it generate, what is the data types of each variable.
package com.test.my;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/helloWorldREST")
@Api(value = "/helloWorldREST")
public class HelloWorldREST {
@GET
@Path("/{xyz}")
@ApiOperation(value = "/{xyz}", notes = "Hello world example - java code.")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK - java code"),
@ApiResponse(code = 400, message = "Bad Request examp - java code.") })
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "xyz", dataType = "string", paramType = "path"),
@ApiImplicitParam(name = "abc", dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "my-header", dataType = "string", paramType = "header") })
@Produces(MediaType.APPLICATION_XML)
public Response responseMsg(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Daniel, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
@POST
@Path("/{xyz}")
@ApiOperation(value = "/{xyz}", notes = "Hello world example - java code.")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK - java code"),
@ApiResponse(code = 400, message = "Bad Request examp - java code.") })
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "xyz", dataType = "string", paramType = "path"),
@ApiImplicitParam(name = "abc", dataType = "string", paramType = "query"),
@ApiImplicitParam(name = "my-header", dataType = "string", paramType = "header") })
@Produces(MediaType.APPLICATION_XML)
public Response responseMsgPost(@PathParam("xyz") String parameter,
@DefaultValue("Nothing to say") @QueryParam("abc") String qwe,
@HeaderParam("my-header") final String header,
@Context final HttpHeaders httpHeaders, String payload) {
System.out.println(" helloWorldREST received : " + parameter);
System.out.println("path param " + parameter + " query param "
+ qwe + " header param " + header);
String output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<letter>\n Dear Daniel, Keep up the good work! </letter>\n";
return Response.status(200).entity(output).build();
}
}
4.5. Hit the end point to generate static json.
http://localhost:8080/Swagger-Test1/swagger.json
Below is the generated json you will receive.
{"swagger":"2.0","info":{"version":"1.0.0","title":""},"host":"localhost:8080","basePath":"/Swagger-Test1","tags":[{"name":"helloWorldREST"}],"schemes":["http"],"paths":{"/helloWorldREST/{xyz}":{"get":{"tags":["helloWorldREST"],"summary":"/{xyz}","description":"Hello world example - java code.","operationId":"responseMsg","produces":["application/xml"],"parameters":[{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string","default":"Nothing to say"},{"name":"my-header","in":"header","required":false,"type":"string"},{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string"},{"name":"my-header","in":"header","required":false,"type":"string"}],"responses":{"200":{"description":"OK - java code"},"400":{"description":"Bad Request examp - java code."}}},"post":{"tags":["helloWorldREST"],"summary":"/{xyz}","description":"Hello world example - java code.","operationId":"responseMsgPost","produces":["application/xml"],"parameters":[{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string","default":"Nothing to say"},{"name":"my-header","in":"header","required":false,"type":"string"},{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"name":"xyz","in":"path","required":true,"type":"string"},{"name":"abc","in":"query","required":false,"type":"string"},{"name":"my-header","in":"header","required":false,"type":"string"}],"responses":{"200":{"description":"OK - java code"},"400":{"description":"Bad Request examp - java code."}}}}}}
4.6. Paste generated JSON into https://jsonformatter.curiousconcept.com/, do formatting of same.
Remove any duplicate key value.
Note :
I have removed "host":"localhost:8080","basePath":"/Swagger-Test1" and simply prepended Swagger-Test1 to url.
/Swagger-Test1/helloWorldREST/{xyz}
and I have also removed some duplicate inputs types.
We have below static json now.
{
"swagger":"2.0","info":{
"version":"1.0.0",
"title":""
},
"tags":[
{
"name":"helloWorldREST"
}
],
"schemes":[
"http"
],
"paths":{
"/Swagger-Test1/helloWorldREST/{xyz}":{
"get":{
"tags":[
"helloWorldREST"
],
"summary":"/{xyz}",
"description":"Hello world example - java code.",
"operationId":"responseMsg",
"produces":[
"application/xml"
],
"parameters":[
{
"name":"xyz",
"in":"path",
"required":true,
"type":"string"
},
{
"name":"abc",
"in":"query",
"required":false,
"type":"string",
"default":"Nothing to say"
},
{
"name":"my-header",
"in":"header",
"required":false,
"type":"string"
}
],
"responses":{
"200":{
"description":"OK - java code"
},
"400":{
"description":"Bad Request examp - java code."
}
}
},
"post":{
"tags":[
"helloWorldREST"
],
"summary":"/{xyz}",
"description":"Hello world example - java code.",
"operationId":"responseMsgPost",
"produces":[
"application/xml"
],
"parameters":[
{
"name":"xyz",
"in":"path",
"required":true,
"type":"string"
},
{
"name":"abc",
"in":"query",
"required":false,
"type":"string",
"default":"Nothing to say"
},
{
"name":"my-header",
"in":"header",
"required":false,
"type":"string"
},
{
"in":"body",
"name":"body",
"required":false,
"schema":{
"type":"string"
}
}
],
"responses":{
"200":{
"description":"OK - java code"
},
"400":{
"description":"Bad Request examp - java code."
}
}
}
}
}
}
4.7 Paste this static json in side webapp folder, we call it only-swagger. Call this json as two.json.
5 Do editing in index.html, this file delivered with swagger UI code and point url to two.json.
$(function () {
var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) {
url = decodeURIComponent(url[1]);
} else {
url = "http://localhost:8080/only-swagger2/two.json";
}
6. Deploy the new only-swagger2.war into jetty server.
7. Hit the below end point..
http://localhost:8080/only-swagger2/index.html
Swagger UI page will be display.
You can submit request form Swagger UI.
Thank you showing interest in the post !!






