Reputation: 145
I have several rest end points which I want to expose through swagger. I have downloaded a example of swagger rest 2. When i am viewing the generated json in the swagger ui it is only showing the get endpoints. Post and put endpoints are not shown. Please help.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>jersey</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,
io.swagger.sample.resource
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.wadl.disableWadl</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<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/SwaggerWithRest2/api</param-value>
</init-param>
<init-param>
<param-name>swagger.filter</param-name>
<param-value>io.swagger.sample.util.ApiAuthorizationFilterImpl</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<filter>
<filter-name>ApiOriginFilter</filter-name>
<filter-class>io.swagger.sample.util.ApiOriginFilter</filter-class>
</filter>
<servlet>
<servlet-name>Bootstrap</servlet-name>
<servlet-class>io.swagger.sample.Bootstrap</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<filter-mapping>
<filter-name>ApiOriginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
/**
* Copyright 2016 SmartBear Software
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.swagger.sample.resource;
import io.swagger.annotations.*;
import io.swagger.sample.data.UserData;
import io.swagger.sample.model.User;
import io.swagger.sample.exception.ApiException;
import javax.ws.rs.core.Response;
import javax.ws.rs.*;
@Path("/user")
@Api(value="/user", description = "Operations about user")
@Produces({"application/json", "application/xml"})
public class UserResource {
static UserData userData = new UserData();
@POST
@ApiOperation(value = "Create user",
notes = "This can only be done by the logged in user.",
position = 1)
public Response createUser(
@ApiParam(value = "Created user object", required = true) User user) {
userData.addUser(user);
return Response.ok().entity("").build();
}
@POST
@Path("/createWithArray")
@ApiOperation(value = "Creates list of users with given input array",
position = 2)
public Response createUsersWithArrayInput(@ApiParam(value = "List of user object", required = true) User[] users) {
for (User user : users) {
userData.addUser(user);
}
return Response.ok().entity("").build();
}
@POST
@Path("/createWithList")
@ApiOperation(value = "Creates list of users with given input array",
position = 3)
public Response createUsersWithListInput(@ApiParam(value = "List of user object", required = true) java.util.List<User> users) {
for (User user : users) {
userData.addUser(user);
}
return Response.ok().entity("").build();
}
@PUT
@Path("/{username}")
@ApiOperation(value = "Updated user",
notes = "This can only be done by the logged in user.",
position = 4)
@ApiResponses(value = {
@ApiResponse(code = 400, message = "Invalid user supplied"),
@ApiResponse(code = 404, message = "User not found") })
public Response updateUser(
@ApiParam(value = "name that need to be deleted", required = true) @PathParam("username") String username,
@ApiParam(value = "Updated user object", required = true) User user) {
userData.addUser(user);
return Response.ok().entity("").build();
}
@DELETE
@Path("/{username}")
@ApiOperation(value = "Delete user",
notes = "This can only be done by the logged in user.",
position = 5)
@ApiResponses(value = {
@ApiResponse(code = 400, message = "Invalid username supplied"),
@ApiResponse(code = 404, message = "User not found") })
public Response deleteUser(
@ApiParam(value = "The name that needs to be deleted", required = true) @PathParam("username") String username) {
if (userData.removeUser(username)) {
return Response.ok().entity("").build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
@GET
@Path("/{username}")
@ApiOperation(value = "Get user by user name",
response = User.class,
position = 0)
@ApiResponses(value = {
@ApiResponse(code = 400, message = "Invalid username supplied"),
@ApiResponse(code = 404, message = "User not found") })
public Response getUserByName(
@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ", required = true) @PathParam("username") String username)
throws ApiException {
User user = userData.findUserByName(username);
if (null != user) {
return Response.ok().entity(user).build();
} else {
throw new io.swagger.sample.exception.NotFoundException(404, "User not found");
}
}
@GET
@Path("/login")
@ApiOperation(value = "Logs user into the system",
response = String.class,
position = 6)
@ApiResponses(value = { @ApiResponse(code = 400, message = "Invalid username/password supplied") })
public Response loginUser(
@ApiParam(value = "The user name for login", required = true) @QueryParam("username") String username,
@ApiParam(value = "The password for login in clear text", required = true) @QueryParam("password") String password) {
return Response.ok()
.entity("logged in user session:" + System.currentTimeMillis())
.build();
}
@GET
@Path("/logout")
@ApiOperation(value = "Logs out current logged in user session",
position = 7)
public Response logoutUser() {
return Response.ok().entity("").build();
}
}
Upvotes: 0
Views: 1937
Reputation: 938
It might have to do with the ApiAuthorizationFilterImpl
in Jersey2Config
of web.xml
.
The comment of this class states:
/**
* The rules are maintained in simple map with key as path and a boolean value
* indicating given path is secure or not. For method level security the key is
* combination of http method and path.
*
* If the resource or method is secure then it can only be viewed using a
* secured api key
*
* Note: Objective of this class is not to provide fully functional
* implementation of authorization filter. This is only a sample demonstration
* how API authorization filter works.
*
*/
and the method isOperationAllowed
states that all methods which are not get or if path starts with 'store
need to be checked whether key available. (quickly deducted so might be wrong).
So it might all work if you remove the filter.
Upvotes: 2