【问题标题】:How to ignore certain field from response in REST API Java如何在 REST API Java 中忽略响应中的某些字段
【发布时间】:2020-11-29 16:09:46
【问题描述】:

我写了两个微服务,微服务 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:

ValidateCCResource.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。

【问题讨论】:

    标签: java json api rest microservices


    【解决方案1】:

    如果我没有正确回答您的问题,您可以这样做:-

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

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

    它是如何工作的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2017-04-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多