簡體   English   中英

Spring Boot Controller應該如何處理“丟失”的請求標頭?

[英]How should 'missing' request headers be handled by a Spring Boot Controller?

我正在編寫一個Spring Boot應用程序。 我的控制器有2個自定義請求標頭。 我執行了幾次測試,只是發現標題不存在時我的應用程序返回了“ 404”。

但是,我期望這會導致“ 400”錯誤?

誰能解釋為什么會這樣? 我應該如何正確處理呢? 正如告訴服務的使用者,標頭丟失了嗎?

@RestController("fundsConfirmationController")
@RequestMapping(
    value="/accounts/{accountId}/funds-confirmations",
    headers = {"X-CAF-MSGID", "X-AccessToken"}
) 
public class FundsConfirmationController implements FundsConfirmationControllerI{

private FundsConfirmationServiceI fundsConfirmationService;

@Autowired
public FundsConfirmationController(FundsConfirmationServiceI fundsConfirmationService){
    this.fundsConfirmationService = fundsConfirmationService;
}

@GetMapping(
        consumes = MediaType.APPLICATION_JSON_VALUE,
        produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<?> fundsConfirmation(@RequestHeader(value="X-CAF-MSGID") String messageId,
                                           @RequestHeader(value="X-AccessToken") String accessToken,
                                           FundsConfirmationRequest requestParams) { ... }

2個解決方案可以相同。

首先使用@RequestHeaderrequired false

@RequestMapping(value = "/{blabla}", method = RequestMethod.POST)
public void post(@RequestHeader(value="X-CAF-MSGID", required=false) String X-CAF-MSGID) {
    if(X-CAF-MSGID == null) {
        // Your JSON Error Handling
    } else {
        // Your Processing
    }
}

第二個使用HttpServletRequest而不是@RequestHeader

@RequestMapping(value = "/{blabla}", method = RequestMethod.POST)
public void post(HttpServletRequest request) {
    String X-CAF-MSGID = request.getHeader("X-CAF-MSGID");
    if(X-CAF-MSGID == null) {
        // Your JSON Error Handling
    } else {
        // Your Processing
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM