【问题标题】:How should 'missing' request headers be handled by a Spring Boot Controller?Spring Boot Controller 应该如何处理“丢失”的请求标头?
【发布时间】:2019-08-03 15:22:02
【问题描述】:

我正在编写一个 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) { ... }

【问题讨论】:

    标签: java spring-boot spring-mvc error-handling controller


    【解决方案1】:

    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
        }
    }
    

    【讨论】:

    • HTTP 标头默认计入定义端点。它们是进一步的规范,因为 404 是对没有所述标头的请求的适当响应。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2022-07-15
    • 2016-08-04
    • 2016-01-24
    • 2018-03-22
    • 2019-02-28
    相关资源
    最近更新 更多