[英]swagger-codegen client: How to include jackson annotations on models
我正在使用 swagger-codegen 生成一個 rest 客戶端,但是我遇到了一個問題,我正在使用的服務返回一個帶有繼承的模型,API 模型如下所示:
public class Person
{
private List<Book> books;
...
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "typeClass")
@JsonSubTypes({ @JsonSubTypes.Type(value = Magazine.class) })
public class Book
{
//some prop
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "typeClass")
public class Magazine extends Book
{
//some prop
}
API 模型使用 jackson 注解進行注解以處理繼承。 API 工作正常。 當我生成客戶端時,客戶端模型沒有jackson注解,所以當我使用生成的客戶端消費API時,它總是使用Book類進行反序列化。 它不會“看到” Magazine 類。 我認為這是因為生成的模型沒有處理繼承的 jackson 注釋。
如何配置 swagger-codegen 以將 jackson 注釋添加到模型中。
非常感謝...
而不是使用
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l java
-o samples/client/petstore/java
你可以和
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l spring
-o samples/client/petstore/java
通過語言更改,他們還將 gson 換成了 Jackson。
在你的情況下,你會有類似的東西
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.model.Category;
import io.swagger.model.Tag;
import java.util.ArrayList;
import java.util.List;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.*;
/**
* Pet
*/
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2020-06-04T13:33:18.844+02:00")
public class Pet {
@JsonProperty("id")
private Long id = null;
@JsonProperty("category")
private Category category = null;
@JsonProperty("name")
private String name = null;
@JsonProperty("photoUrls")
@Valid
private List<String> photoUrls = new ArrayList<String>();
@JsonProperty("tags")
@Valid
private List<Tag> tags = null;
...
來源: https : //github.com/swagger-api/swagger-codegen/issues/5785
當您使用 Generator.Swagger( https://generator.swagger.io/在線 swagger Codegen api:/gen/clients/{language})構建客戶端時,您可以查看 /gen/clients/{language} 中的設置或https://openapi-generator.tech/docs/generators/java/並建立您的請求。
在 pom.xml 的插件配置中添加以下代碼行
<'library>$libraryValue<'/library>
$libraryValue 可以基於您在依賴項中使用的庫。 如果您使用的是 Jersey 1.xx 或者 jersey2 如果您使用的是 Jersey 2.xx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.