2016-03-16 16 views
7

मैं जर्सी आधारित आरईएसटी एपीआई लागू कर रहा हूं और इसके लिए एचटीएमएल आधारित दस्तावेज उत्पन्न करने के लिए स्वैगर का उपयोग कर रहा हूं। मैं प्रलेखन उत्पन्न करने के लिए संसाधनों को पढ़ने और स्कैन करने के लिए swagger की टिप्पणियों का उपयोग कर रहा हूँ। मैं नीचे के रूप में @ApiResponse एनोटेशन का उपयोग कर प्रत्येक संसाधन के लिए प्रतिक्रिया निर्दिष्ट किए हैं:स्वैगर यूआई में स्वैगर यूआई में एक्सएमएल/जेएसओएन नमूना मूल्य दिखाएं

@Path("/hello") 
@Api(value = "Hello World") 
public class HelloRest 
{ 
    @GET 
    @ApiOperation(value="Hello world", httpMethod="GET") 
    @ApiResponses(value={ @ApiResponse(code = 200, message = "Success", response = WebservicesErrorResponse.class, reference = "C:/Desktop/hello.json") 
          @ApiResponse(code = 404, message = "Not found", response = WebservicesErrorResponse.class)}) 
    @Produces({"application/json", "application/xml"}) 
    public Response helloWorld() 
    { 
     return Response.status(WebservicesCommonTypes.SUCCESS).entity("Hello rest API").build(); 
    } 
} 

यह ठीक काम कर रहा है और यह नीचे के रूप में HTML आधारित प्रलेखन पैदा कर रहा है: Snap shot which is generated by Swagger UI for Jersey based REST API

यह पूरी संरचना (मॉडल से पता चलता है और उदाहरण मान) प्रतिक्रिया प्रतिक्रिया अगर 404 है। और उदाहरण मान में, यह मान नहीं दिखा रहा है, केवल मॉडल के लिए प्रत्येक पैरामीटर के लिए प्रकार दिखा रहा है।

मैं प्रतिक्रिया के लिए नमूना उदाहरण स्कीमा दिखाना चाहता हूं ताकि ग्राहक समझ सके कि प्रत्येक प्रतिक्रिया के लिए सटीक प्रतिक्रिया क्या होगी। मैंने इस पर शोध किया और मैंने पाया कि एक विशेषता है:

@ApiResponse (संदर्भ = "") - प्रतिक्रिया प्रकार का संदर्भ निर्दिष्ट करता है। निर्दिष्ट संदर्भ या तो स्थानीय या दूरस्थ हो सकता है और इसका उपयोग किया जाएगा, और किसी भी निर्दिष्ट प्रतिक्रिया() वर्ग को ओवरराइड करेगा।

मैं इसे करने की कोशिश की है और मैं इसे नीचे के रूप में मेरी sample.json फ़ाइल के लिए एक रास्ता दे:

@ApiResponse(code = 200, message = "Success", response = WebServicesErrorResponse, reference = "http://localhost:9001/myinstanceofapplication/html/api-doc/hello.json") 

और मैं भी एक और रास्ता है कि है नीचे की तरह स्थानीय पथ देने के लिए करने की कोशिश की:

@ApiResponse(code = 200, message = "Success", response = WebservicesErrorResponse.class, reference = "C:/Desktop/hello.json") 

लेकिन जब अकड़ इसके लिए दस्तावेज़ उत्पन्न तो यह निम्न देता है:

यह दिखा रहा है सी: /Desktop/hello.json परिभाषित नहीं है!

मैंने शोध किया है और बहुत से समाधानों का प्रयास किया है लेकिन इसे उचित संदर्भ देने में सक्षम नहीं हो सका। मैंने पाया कि यह https://github.com/swagger-api/swagger-ui/issues/1700 और https://github.com/swagger-api/swagger-js/issues/606 द्वारा एक मुद्दा है।

तो मैं @ApiResponse के संदर्भ विशेषता का उपयोग कैसे कर सकता हूं, उस swagger नमूना एक्सएमएल/JSON swagger UI दिखा सकता है। मेरे मॉडल वर्ग के नीचे है:

@XmlRootElement(name="response") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class WebservicesErrorResponse 
{ 
    @XmlElement 
    private int code; 

    @XmlElement 
    private String message; 

    public WebservicesErrorResponse(){ } 


    public WebservicesErrorResponse(int code, String message) 
    { 
     this.code = code; 
     this.message = message; 
    } 

    public int getCode() 
    { 
     return code; 
    } 
    public void setCode(int code) 
    { 
     this.code = code; 
    } 

    public String getMessage() 
    { 
     return message; 
    } 
    public void setMessage(String message) 
    { 
     this.message = message; 
    } 
} 

और मैं अकड़ यूआई में नमूना XML निम्नलिखित दिखाना चाहते हैं:

<?xml version="1.0"?> 
<response> 
    <code>200</code> 
    <message>success</message> 
</response> 

उत्तर

0

आप के साथ अपने मॉडल वर्ग (नहीं API संसाधन/विधि!) टिप्पणी करने की जरूरत है और @ApiModelProperty एनोटेशन described here के रूप में।

के लिए आप क्या हासिल करना चाहते, यह शायद अपने मॉडल सदस्यों टिप्पणी करने के लिए पर्याप्त होगा इस प्रकार है:

@ApiModelProperty(example = "200") 
@XmlElement 
private int code; 

@ApiModelProperty(example = "success") 
@XmlElement 
private String message; 

यदि वह काम नहीं करता है, टिककर खेल पर टिप्पणी डालने की कोशिश (मैं नहीं कर रहा हूँ इसके एक्सएमएल पक्ष से वास्तव में परिचित, केवल जेएसओएन के लिए किया है)।

संबंधित मुद्दे