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

java中如何在响应中单独忽略JSON字段

韦业
2023-03-14

我想从我的响应中排除name和age,但是当我收到JSON有效载荷请求时,我需要name和age字段-在我的业务逻辑之后,我想发送状态和消息作为JSON响应的一部分。姓名和年龄应该排除在外。我如何在Java中实现这一点?

public class Sample {

    private String name;
    private String age;
    private String status;
    private String message;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

我的控制器类:

@PostMapping(path = "/testApp", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> test(@RequestBody Sample sample) {
    Sample response = myService.calculate(sample);
    return new ResponseEntity<Object>(response, HttpStatus.OK);
}
{
    "name": "Mark",
    "age": "48"
}
{
    "status": "200",
    "message": "success"
}

共有1个答案

宋嘉禧
2023-03-14

使用Jackson for Java/JSON序列化和反序列化提供了许多控制生成和接受的JSON的方法。

由于您希望在某些情况下省略字段,因此最直接的方法是使用@jsonignore注释。

@jsonIgnore可以在字段、getter和setter(以及更多)上使用,以始终忽略字段、在输出到JSON时忽略,或者在JSON->Java反序列化时忽略。

public class Sample {
    private String name;
    private String age;
    private String status;
    @JsonIgnore private String message;
}
public class Sample {

    private String name;
    private String age;
    private String status;
    private String message;

    @JsonIgnore        // Added Annotation
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @JsonIgnore        // Added Annotation
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

使用这些注释,当您从JSON反序列化时,将在对象中设置name和age,但在序列化到JSON时,它们不会输出,并且您只需要一个类,而不需要用于请求和响应的单独类。

 类似资料:
  • 我有简单的asmx返回JSON: C#类定义: 使用jquery$调用。ajax: 我的JSON响应(带有不需要的空值): {“PropertyA”:“1”,“PropertyB”:null,“PropertyC”:“1”,“PropertyD”:null} 问:如何仅使用JSON中的非空属性,尽可能多地使用我已经拥有的内容? 我在这里看到了一些答案,人们返回JSON对象和用JSON属性定义的属性

  • 问题内容: 我正在使用RestEasy并hibernate以返回Jackson的响应。我有一个bean播放器,具有以下字段:名称,id,年龄,位置。 现在,我正在实现两种重现json的rest方法。 ,这将返回一名玩家:姓名,身份证,年龄,位置。 ,这将返回玩家列表,但是有了这个玩家列表,我不想返回位置。 我的意思是,我该如何为一个响应添加一个字段,而对另一个响应忽略它。 请提出建议。 谢谢 问题

  • 问题内容: 我想解析以下Json响应: 我尝试使用SIMPLE JSON解析器,但这对我不起作用: 问题答案: 输出: 评论: 我没有添加验证 [编辑] 加载json字符串的其他方法

  • 但是我希望错误消息不是文本格式的,而是JSON格式的。我该怎么办?

  • 问题内容: 当我发送此请求时: 我的休息服务: 我期望得到一个例外,因为: 我的域模型中没有invalidField。 日期格式无效。 但是实际上我得到的测试对象具有空值。我的dmain模型是: 我认为这不是有效的行为。我该如何解决? 感谢帮助。 解: 正如Blaise Doughan所说,需要扩展MOXy的MOXyJsonProvider并重写preReadFrom方法以设置自定义javax.x

  • 我有一个DB中的人员列表,每个人都有一个CV字段,这是一个Spring中的多部分文件。我试图从数据库中获取所有的人,但忽略CV字段,因为我不想在使用getAllPerson函数时被下载。有可能?