Swagger-core: Swagger๋Š” openapi.yaml์„ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ด ์•„๋‹Œ ์œ ํ˜•์—์„œ @Schema(required = true)๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 07์›” 29์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: swagger-api/swagger-core

openapi.yaml ์‚ฌ์–‘์„ ์ƒ์„ฑํ•  ๋•Œ Swagger๊ฐ€ ๊ฐœ์ฒด ํ•„๋“œ์˜ @Schema(required = true) ์ฃผ์„์„ ๋ฌด์‹œํ•˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์žฌํ˜„ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.
1) 2.0์—์„œ swagger-samples ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค(https://github.com/swagger-api/swagger-samples/tree/2.0).
2) Swagger 2.0.8(๋น„์Šค๋ƒ…์ƒท)์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฃจํŠธ pom.xml์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
3) java-jersey2-minimal๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
4) Pet ๊ฐœ์ฒด ์•„๋ž˜์—์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  @XmlElement(name = "id")
  @Schema(required = true)
  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  @XmlElement(name = "category")
  @Schema(required = true)
  public Category getCategory() {
    return category;
  }

(์—ฌ๊ธฐ์„œ "id" ๋ฐ "category" ํ•„๋“œ ๋ชจ๋‘์— @Schema(required = true) ํ•„์ˆ˜ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.)

5) ์„ค๋ช…๋œ ๋Œ€๋กœ ์ƒ˜ํ”Œ์„ ๋นŒ๋“œํ•˜๊ณ (https://github.com/swagger-api/swagger-samples/tree/2.0/java/java-jersey2-minimal) yaml์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ƒ์„ฑ๋œ yaml์— ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

...
Pet:
      required:
      - id
      type: object
      properties:
        id:
          type: integer
          format: int64
        category:
          $ref: '#/components/schemas/Category'
...

์ด๊ฒƒ์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ @Schema(required = true) ๋กœ id ๋ฐ category ํ•„๋“œ๋ฅผ ๋ชจ๋‘ ์ถ”๊ฐ€ ํ•  ์ˆ˜ id ๋ฐ category ์˜ "์š”๊ตฌ"์„น์…˜ ์• ์™„ ๋™๋ฌผ ์–Œ. ๊ทธ๋Ÿฌ๋‚˜ id ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ OpenApi ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ(์ฆ‰, $ref๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ)์ธ ๊ฒฝ์šฐ์—๋งŒ ํ•„๋“œ๋ฅผ "ํ•„์ˆ˜"๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

category ๋ฅผ "ํ•„์ˆ˜" ์„น์…˜์— ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด Swagger UI์— category ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด category ์— ๋‹ค๋ฅธ ํ•„์ˆ˜ ํ•„๋“œ์™€ ๋™์ผํ•œ ๋นจ๊ฐ„์ƒ‰ ๋ณ„ํ‘œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ณต์žกํ•œ ์œ ํ˜•์˜ ๊ฐœ์ฒด๊ฐ€ API ์š”์ฒญ์—์„œ ์ฑ„์›Œ์ ธ์•ผ ํ•˜๊ณ  ์ƒ๋žต๋  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ฒด๋ฅผ ์ง€์ •ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Immutables๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Immutables์˜ ์ผ๋ถ€ ํ•„๋“œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํ•„๋“œ์˜ ๊ฒฝ์šฐ immutables๋Š” ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ throwํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  3 ๋Œ“๊ธ€

https://stackoverflow.com/questions/51671883/swagger-ignores-schema-properties-for-referenced-schemas
์ด๊ฒƒ์€ ๋ฐ˜์ฐฝ๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์™„์ „ํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ฒฐ๊ตญ # 3482์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰