简体   繁体   中英

Jersey server, rest api : How to remove the code and type from the response body?

I'm trying to create a Rest Api using Jax-rs Jersey from a base code generated by swagger.

The specifications are for exemple for a specific Request : Code : 200 Description : User token for login Schema : String

My problem is that the generated code use the class :javax.ws.rs.core.Response that should not be extended according to the documentation.

I'm using this kind of code to build the response :

return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK,apiToken)).build(); 

The response generated looks like that :

{"code":4,"type":"ok","message":"uHN2cE7REfZz1pD17ITa"}

When i only want to have :"uHN2cE7REfZz1pD17ITa" in the body. Is that possible using Jersey ? Or is this format part of the jax-rs specifications ?

Thank you.

ApiResponseMessage from Swagger does not extend Response from JAX-RS. Check the code and you will see that ApiResponseMessage is just a POJO. That is, the piece of code you posted in your question is just fine.

If you only need the token, you can use:

return Response.ok(apiToken).build();

The following gives you the same result:

return Response.ok().entity(apiToken).build();

Since your resource method will produce just a piece of text (not a valid JSON unless the piece of text is wrapped into quotes), the most suitable media type for the response would be text/plain . It could be achieved by either annotating the resource method with @Produces(MediaType.TEXT_PLAIN) or setting the media type in the response, as following:

@GET
@Produces(MediaType.TEXT_PLAIN)
public Response getToken() {
    String apiToken = ...
    return Response.ok(apiToken).build();  
}
@GET
public Response getToken() {
    String apiToken = ...
    return Response.ok(apiToken, MediaType.TEXT_PLAIN).build();  
}

Alternatively you also could make your method return just a String :

@GET
@Produces(MediaType.TEXT_PLAIN)
public String getToken() {
    String apiToken = ...
    return apiToken;  
}

JAX-RS does not require Request or Response in specific format for text,json, xml, or html fallowing a schema . But They all have to be well formated in according to their specifications.

You can send text response like this in jersey like this

return Response.ok().entity("uHN2cE7REfZz1pD17ITa").build();

I am new to swagger myself So i don't know if the Response in question can be changed or not . But There is no restriction from jersey side

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM