1

在我们的项目(springMVC)Rest API 项目中,我希望只对请求和响应使用一个模型(以避免添加大量代码来将字段从对象复制到对象)

我想用 Swagger 来处理所有的文档,但我遇到了一个小问题。例如假设我有一个模型用户

public class User  {
 private Long id;
 private String username;
 private String password;
}

和一个简单的控制器

 public void createUser(@RequestBody User user)...
 public User getUser(Long id) ..

现在我想大摇大摆地隐藏反序列化而不是序列化的属性密码(因此它显示为输入但输出)和相反的 Id 字段。

我尝试使用@JsonIgnore 和@JsonProperty,但在swagager-ui 上它要么显示所有内容,要么隐藏所有内容。我无法让它工作。

有人可以告诉我归档我的目标的最佳方式是什么?在使用 swagger 时是否可以使用单个模型进行请求和响应?如果无法使用@JsonIgnore,有没有办法以不同的方式存档?

4

2 回答 2

2

Swagger 不希望您拥有同名的不同输入/输出模型。您应该简单地创建一个接口并将其附加到输入,并为输出扩展该接口或添加具有附加字段的实现。例如,请参阅此处了解建模技巧:

https://swaggerhub.com/api/swagger-tutorials/modeling-samples/1.0.0

您的确切用例就是其中之一。上面链接中发布的解决方案在这里:

definitions:
  User:
    description: this is a user that would be passed into the system
    properties:
      username:
        type: string
  UserResponse:
    allOf:
      - $ref: '#/definitions/User'
      - type: object
        required:
          - id
        properties:
          id:
            type: string
            format: uuid
            readOnly: true

其中User是输入对象,UserResponse是输出对象,带有附加id字段。

于 2016-01-12T17:29:03.523 回答
0

使用字段的 getter添加@JsonIgnore ,使用 setter 或字段添加@JsonProperty 。由于使用不可变代码或最终字段,有时 setter 不起作用。

例子 :

  public class Student {
   private Float name;
   private String rollnum;
   private String section;
   @JsonProperty
   private Boolean passOrFailed;

   @JsonIgnore
   public Boolean getpassOrFailed {
     return active;
   }

}

请记住同时使用其他两种方法,否则会导致在反序列化中删除元素

于 2021-06-29T09:56:39.393 回答