簡體   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