似乎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函数
isC()
)
答案 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