Serialization 如何在序列化(但不是反序列化)期间隐藏字段

Serialization 如何在序列化(但不是反序列化)期间隐藏字段,serialization,jackson,hide,swagger,springfox,Serialization,Jackson,Hide,Swagger,Springfox,在我们的项目(springMVC)RESTAPI项目中,我希望对请求和响应只使用一个模型(以避免必须添加大量代码来将字段从一个对象复制到另一个对象) 我想大摇大摆地处理所有的文件,但我遇到了一个小问题。例如,假设我有一个模型用户 public class User { private Long id; private String username; private String password; } 和一个简单的控制器 public void createUser(@Reques

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

我想大摇大摆地处理所有的文件,但我遇到了一个小问题。例如,假设我有一个模型用户

public class User  {
 private Long id;
 private String username;
 private String password;
}
和一个简单的控制器

 public void createUser(@RequestBody User user)...
 public User getUser(Long id) ..
现在,我希望swagger在反序列化而不是序列化时隐藏属性密码(因此,在输入而不是输出时显示属性密码) Id字段则相反

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


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

Swagger不希望您使用相同名称的不同输入/输出模型。您只需创建一个接口并将其附加到输入,对于输出,扩展该接口或添加带有附加字段的实现。例如,有关建模技巧,请参见此处:

您的确切用例就是其中之一。以上链接中发布的解决方案如下:

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
字段。

我确实尝试了接口路径,但我没有让springMVC的“@RequestBody”与接口一起工作。我的意思是它确实对swagger有效,但我不能调用端点,因为它不知道要使用哪个实现。(我用getUsername和setUsername创建了一个UserRequest接口,并让用户实现它,我将UserRequest作为响应放在@RequestBody和User中)接口的第二个问题是“子对象”。考虑到在用户类中有一个“地址”对象。我不知道反序列化字段地址的方法,例如在address对象中,您可以尝试将
User
UserResponse
的java类作为子类吗?我希望springfox能做好这项工作。您可能需要在该回购协议上开立一个问题