2014-12-03 112 views
4

似乎Swagger忽略JAXB註釋,比如@XmlTransient如何使揚鞭認識@XmlTransient(如不能忽視它)

除了揚鞭似乎解析干將爲好,忽略@XmlAccessorType(XmlAccessType.FIELD)

是有辦法指定Swagger尊重JAXB註釋?

UPDATE

代碼示例

import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlTransient; 

import com.wordnik.swagger.annotations.ApiModel; 
import com.wordnik.swagger.annotations.ApiModelProperty; 

    @XmlRootElement 
    @XmlAccessorType(XmlAccessType.FIELD) 
    @ApiModel(value = "aaa") 
    public class A implements IA 
    { 
     @ApiModelProperty(value = "bla", required = true) 
     @XmlElement(name="a") 
     private String a; 

     @XmlTransient 
     private B b; 

     private A() {}//JAXB 

     @XmlTransient 
     public boolean isC() { return true;}; 
} 

接口IA沒有註釋。並且沒有獲得者可能會干擾B場。

招搖產生JSON是:

"A": { 
     "id": "A", 
     "description": "aaa", 
     "properties": { 
     "c": { 
      "type": "boolean" 
     } 
     } 
    } 

可以看出揚鞭忽略的領域和@XMLAccesorType(由Webron在他的回答說明) 但也忽略了對isC() getter函數JAXB註釋(@XmlTransient

+0

你使用哪種版本招搖核心的?你直接使用它還是作爲另一個庫的依賴項(比如swagger-springmvc,spray-swagger)? – Ron 2014-12-07 11:44:22

+0

swagger-jersey-jaxrs_2.10 v1.3.10 – Dudi 2014-12-07 13:25:32

+0

字段/方法對它們有任何額外的註釋嗎?你能編輯問題並提供一個示例模型類嗎? – Ron 2014-12-07 14:03:38

回答

2

它改變了我的版本。 例如它適用於swagger-jaxrs_2.10 v 1.3.6

請注意,它不適用於swagger-jaxrs_2.10 v 1.3.0 或swagger-jeresy-jaxrs_2.10 v 1.3.10 ...

至少現在@JsonIgnore@XmlTransient受到尊重

+0

請注意,在您提到的問題的評論中,您提到您使用的是比這裏提到的更晚的1.3.10。 – Ron 2014-12-15 09:23:24

+0

是的,當我使用swagger-jersey-jaxrs_2.10 v1.3.10時,這並不適用於我,然後我轉向了swagger-jaxrs_2.10並且在那裏使用了1.3.0。仍然沒有工作。然後我轉移到1.3.6 – Dudi 2014-12-15 10:14:42

+0

轉載了支持評論討論的答案 – Dudi 2014-12-15 10:16:36

1

通過我的測試,該示例不起作用。既然沒有公共訪問者或公共領域,那麼這個大搖大關的內省就不能完全正常工作。

一旦我添加訪問器到a只,它產生了一個只有a字段的模型。

如果該字段是私人的,並且沒有訪問者,則不論是否存在@XmlTransient,都不會包含在該模型中。使用訪問器,@XmlTransient工作得很好。

請記住,swagger-core不會(當前)處理@XmlAccessorType

我懷疑樣本不完整,不允許我進一步調查。

+0

我編輯了示例以添加私有Ctor。傑克遜(和吉森)能夠序列化 – Dudi 2014-12-08 20:32:17

+0

我編輯了樣本以添加私人Ctor。傑克遜(和gson)能夠序列化\反序列化這個類。 如果Swagger不處理XmlAccessorType,這意味着它總是會尋找獲取者。即使我使用xmltransient標記isC(),它也是不受尊重的 – Dudi 2014-12-08 20:43:04

+0

這個代碼甚至不會編譯。我需要一個完整的測試用例。隱藏信息不起作用。提供帶有實現接口的完整類(如果有)以及生成的輸出。沒有它,我只是在黑暗中拍攝。 – Ron 2014-12-09 10:02:52