如何让Swagger识别@XmlTransient(例如不要忽略它)

时间:2014-12-03 22:12:11

标签: java rest jaxb jackson swagger

似乎Swagger忽略JAXB

@XmlTransient注释

此外,Swagger似乎也解析了getter,忽略了@XmlAccessorType(XmlAccessType.FIELD)

有没有办法指定Swagger尊重JAXB注释?

更新

代码示例

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的吸气剂。

swagger生成的JSON是:

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

如所见,Swagger忽略了字段和@XMLAccesorType(正如Webron在他的回答中所指出的那样) 但是也忽略了@XmlTransient getter函数

上的JAXB注释(isC()

3 个答案:

答案 0 :(得分: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受到尊重

答案 1 :(得分:1)

通过我的测试,该样本无法正常工作。由于没有公共访问者和公共领域,所以swagger-core内省完全无法正常工作。

一旦我仅向a添加了访问者,它就会生成一个只包含a字段的模型。

如果该字段是私有的,并且没有访问者,则无论@XmlTransient是否存在,它都不会包含在模型中。使用访问器,@XmlTransient可以正常工作。

请记住,swagger-core不会(当前)处理@XmlAccessorType

我怀疑样本不完整,并且不允许我进一步调查。

答案 2 :(得分:0)

对于2019年的招摇用户,只需在方法顶部使用招摇注解Main()var host = CreateWebHostBuilder(args).Build(); var bus = host.Services.GetRequiredService<IBusControl>(); await bus.StartAsync(); await host.RunAsync(); await bus.StopAsync();

@Hidden