Serialization 如何在序列化(但不是反序列化)期间隐藏字段
在我们的项目(springMVC)RESTAPI项目中,我希望对请求和响应只使用一个模型(以避免必须添加大量代码来将字段从一个对象复制到另一个对象) 我想大摇大摆地处理所有的文件,但我遇到了一个小问题。例如,假设我有一个模型用户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
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能做好这项工作。您可能需要在该回购协议上开立一个问题