当前位置: 首页 > 知识库问答 >
问题:

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

何玉韵
2023-03-14

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

我想用昂首阔步来处理所有的医生,但我遇到了一个小问题。例如,假设我有一个模型用户

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,是否有一种不同的方式来存档?

共有1个答案

刘曾琪
2023-03-14

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

 类似资料:
  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但是这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于

  • 问题内容: 我有一个对象,即时通讯读取和写入,并从和。我不断收到Java期望的错误,但发现了另一个。 在我的课堂上,我已经实现并拥有一个我认为足够的领域。 我是Java序列化的新手。我在这里想念什么? 编辑 如果有关系,我实际上是在尝试读写 这是完整的痕迹: 问题答案: 您正在读取文件吗?在这种情况下,是否立即添加serialVersionUID无关紧要,它不同于文件中存储的那个,并且会创建异常。

  • 问题内容: 我如何才能序列化一个特定的属性,但又防止其反序列化回POCO?是否可以使用属性装饰特定属性? 基本上,我正在寻找一个与ShouldSerialize *方法等效的反序列化方法。 我知道我可以编写一个自定义转换器,但是这样做似乎有点过头了。 编辑: 这里还有一些背景。这背后的原因是我的课看起来像: 我需要请求的属性,但是我不希望它反序列化并触发设置程序逻辑。 问题答案: 最简单的方法是将

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 本文向大家介绍什么是序列化与反序列化?相关面试题,主要包含被问及什么是序列化与反序列化?时的应答技巧和注意事项,需要的朋友参考一下 序列化:将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流 反序列化:将流转换为对象。 这两个过程结合起来,可以轻松地存储和传输数据。    

  • 问题内容: 是否可能:在类中有一个字段,而在Jackson库中进行序列化/反序列化时却为其使用不同的名称? 例如,我有“ Coordiantes”类。 对于从JSON反序列化,希望具有以下格式: 但是当我序列化对象时,结果应该是这样的: 我试图通过在getter和setter上都应用注释(具有不同的值)来实现此目的: 但我有一个例外: org.codehaus.jackson.map.exc.Un