繁体   English   中英

如何忽略 REST API Java 中的响应中的某些字段

[英]How to ignore certain field from response in REST API Java

我写了两个微服务,微服务 A 调用微服务 B 并将响应返回给微服务 A。需求很简单,验证信用卡号并在响应中返回成功或失败。 请在下面找到我的代码:

微服务 A:

@RestController
public class TestController {

    @PostMapping("/users")
    public CreditCard createUser(@RequestBody CreditCard creditCard) {

        Map<String, String> ccDetails = new HashMap<>();
        ccDetails.put("ccNumber", creditCard.getCcNumber());

        ResponseEntity<CreditCard> responseEntity = new RestTemplate()
                .getForEntity("http://localhost:8081/validation/cc/{ccNumber}", CreditCard.class, ccDetails);

        return responseEntity.getBody();
    }
}

CreditCard.java

public class CreditCard {

    private String status;
    private String ccNumber;

    public CreditCard() {
    }

    public String getStatus() {
        return status;
    }
    public String getCcNumber() {
        return ccNumber;
    }
    public void setCcNumber(String ccNumber) {
        this.ccNumber = ccNumber;
    }

}

微服务 B:

验证CCResource.java

@RestController
@RequestMapping("/validation")
public class ValidateCCResource {

    @GetMapping("/cc/{ccNumber}")
    public CreditCardValidation validateCreditCardApplication(@PathVariable String ccNumber) {

        CreditCardValidation response = new CreditCardValidation();
        if (ccNumber.length() == 16) {
            System.out.println("valid credit card - success");
            response.setStatus("Credit Card Number is Valid");
        } else {
            response.setStatus("Credit Card Number is Not Valid");
        }
        return response;
    }
}

CreditCardValidation.java

public class CreditCardValidation {

    private String status;

    public CreditCardValidation() {
    }

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

    public String getStatus() {
        return status;
    }
}

请求正文:

{
    "ccNumber": "1234432232232233"
}

实际反应:

{
    "status": "Credit Card Number is Valid",
    "ccNumber": null
}

预期反应:

{
    "status": "Credit Card Number is Valid"
}

我想在响应中忽略ccNumber ,我尝试使用@JsonIgnore但它不起作用 - 有人可以帮助如何从我的响应中删除 ccNumber。

如果我正确地回答了您的问题,您可以执行以下操作:-

  1. 如果您不想在响应中包含null对象,则可以在模型/数据/dto class 的属性上使用@JsonInclude(Include.NON_NULL)注释。

  2. 如果您根本不想包含任何特定字段,则可以在模型/数据/dto class 中使用@Transient注释该属性。

它是如何工作的:

因此,当您的所有模型/数据/dto 类从 Object 转换为 JSON 时,它们都会被序列化。 在发生此序列化时,您可以决定自定义逻辑以确定最终的 JSON 响应是什么。 这可以简单地通过 Java(和或您用于序列化的任何库)中的可用注释来实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM