首页 > 解决方案 > 如何为 java swagger api 创建一个可重用的字段

问题描述

我有一个接受 java 对象的 java spring boot rest 控制器。

@PutMapping(path = "api/v1/examples/{id}/update")
public ResponseEntity<Void> updateExample(@PathVariable("id") String personsId, @RequestBody ExampleDto dto) {
    return ResponseEntity.noContent().build();
}

ExampleDto 看起来像这样

public class Example {

    @ApiModelProperty(example = "2021-02-18T13:45:07+02:00", notes = "Date pattern is yyyy-MM-dd'T'HH:mm:ssZ example value 2021-02-18T13:45:07+02:00")
    private ZonedDateTime date;

    public String getDate() {
       return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
    }

    public void setDate(String date) {
       this.date = ZonedDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }
  }

这是我喜欢的方式。它正确生成了 swagger 文件,并且在 swaggerui 中它建议了我的 dto 可以使用 setDate(String date) 方法解析的正确值。

但我想制作一个可重用的组件,我可以将它添加到我的 api dtos 中,我不必创建所有方法。

如果我想添加多个日期字段,我的代码将如下所示。

public class Example {

    @ApiModelProperty(example = "2021-02-18T13:45:07+02:00", notes = "Date pattern is yyyy-MM-dd'T'HH:mm:ssZ example value 2021-02-18T13:45:07+02:00")
    private ZonedDateTime date;

    public String getDate() {
       return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
    }

    public void setDate(String date) {
       this.date = ZonedDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }

    @ApiModelProperty(example = "2021-02-18T13:45:07+02:00", notes = "Date pattern is yyyy-MM-dd'T'HH:mm:ssZ example value 2021-02-18T13:45:07+02:00")
    private ZonedDateTime dateTwo;

    public String getDateTwo() {
       return dateTwo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
    }

    public void setDateTwo(String date) {
       this.dateTwo = ZonedDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }
  }

我希望我能做这样的事情。

@Getter
@Setter
public class Example {

    private MyDateType date;

    private MyDateType dateTwo;

  }

我已经可以做到这一点。但后来我的 json 看起来像这样。

{
 "date": {
            "innerDate": "2021-02-18T13:45:07+02:00"
         },
 "dateTwo": {
            "innerDate": "2021-02-18T13:45:07+02:00"
         },
}

我希望 json 看起来像这样

{
 "date": "2021-02-18T13:45:07+02:00",
 "dateTwo": "2021-02-18T13:45:07+02:00"
}

标签: javaspring-bootswaggerswagger-2.0

解决方案


推荐阅读