大数据平台技术笔记

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方法此处省略
上一篇 下一篇

猜你喜欢

热点阅读