jackson与swagger结合使用
2022-06-05 本文已影响0人
OkGogogooo
1. 引言
在SpringBoot微服务开发的过程中,经常需要将Bean转成JSON,以及将Bean模型的描述利用Swagger UI呈现出来。下面用代码例举介绍。
2. 举例
// Jackson注解
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, // Were binding by providing a name
include = JsonTypeInfo.As.PROPERTY, // The name is provided in a property
property = "type", // Property name is type。在Bean转JSON的过程中,会输出"type"键,它的值是@JsonSubTypes里面定义的类对应的名称。
visible = false // 如果为true,在JSON转Bean的时候,会试图将JSON中的“type”的值写入到Bean的type字段。如果为false,则不会进行此项操作
)
@JsonSubTypes({//Below, we define the names and the binding classes.
@JsonSubTypes.Type(value = EventTimeSessionWindowConf.class, name = "EventTimeSessionWindowConf") ,
@JsonSubTypes.Type(value = SlidingCountWindowConf.class , name = "SlidingCountWindowConf") ,
@JsonSubTypes.Type(value = SlidingTimeWindowConf.class , name = "SlidingTimeWindowConf") ,
@JsonSubTypes.Type(value = TumblingCountWindowConf.class , name="TumblingCountWindowConf") ,
@JsonSubTypes.Type(value = TumblingTimeWindowConf.class , name="TumblingTimeWindowConf")
})
// Swagger 注解
@ApiModel(description = "窗口配置"
, subTypes = {EventTimeSessionWindowConf.class
, SlidingCountWindowConf.class
, SlidingTimeWindowConf.class
, TumblingCountWindowConf.class
, TumblingTimeWindowConf.class
}
, discriminator = "type")
// Lombok注解,用来生成equals和hashCode方法
@EqualsAndHashCode
public abstract class WindowConf
{
}
WindowConf的子类EventTimeSessionWindowConf
// swagger 注解。如果API中的模式类名使用java类的SimpleName,value(即name)可以不设置。
@ApiModel(value = "EventTimeSessionWindowConf" , description = "事件时间会话窗口配置")
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class EventTimeSessionWindowConf extends WindowConf
{
Duration mGap ;
String mDynamicExpr ;
@ApiModelProperty("固定间隔")
public Duration getGap()
{
return mGap;
}
public void setGap(Duration aGap)
{
if(mGap != null)
mDynamicExpr = null ;
mGap = aGap;
}
@ApiModelProperty("动态表达式")
public String getDynamicExpr()
{
return mDynamicExpr;
}
public void setDynamicExpr(String aDynamicExpr)
{
if(XString.isNotEmpty(aDynamicExpr))
mGap = null ;
mDynamicExpr = aDynamicExpr;
}
}
3. 其它相关注解使用
// 忽略某些字段,这在类有继承,想忽略基类的某些性质的时候是非常有用的。如果用@JsonIgnore这个作用在方法和字段上的注解
// ,在不能动基类的情况下,就不得不覆写方法,然后加注解
@JsonIgnoreProperties(value = { "fieldName" })
public class Example
{
// 在API文档上不要显示字段attr1
@ApiModelProperty(hidden = true)
// bean转json或json转bean都忽略此字段
@JsonIgnore
public String getAttr1()
{
return "value1" ;
}
// setter方法此处省略
@JsonProperty(access = Access.WRITE_ONLY) // bean转JSON忽略,json转bean起作用
// Access.READ_ONLY. // bean转JSON起作用,json转bean忽略。
public String getAttr2()
{
return "value2" ;
}
// setter方法此处省略