2014-12-03 38 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