java - Spring Boot Controller 应如何处理 'missing' 请求 header ?

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

我正在编写一个 Spring Boot 应用程序。我的 Controller 有 2 个自定义请求 header 。我执行了一些测试,结果发现当 header 不存在时,我的应用程序返回“404”。

但是我预计这会导致“400”错误?

谁能详细说明为什么会发生这种情况吗?以及我该如何正确处理呢?就像告诉服务的消费者 header 丢失一样?

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

关于java - Spring Boot Controller 应如何处理 'missing' 请求 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133591/

相关文章:

java - 同步文件对象

spring - 如何以编程方式覆盖 spring 环境变量

java - 为什么这个数组到二维数组 boolean 值是真的?

java - 使用 JSch 将文件放入远程目录,如果该目录不存在,则创建它

java - 在 Windows 机器上使用 java 运行时类触发命令

java - 请求反序列化期间的自定义声明式 spring pojo 验证

spring - 为什么异步端点的过滤器链被调用两次

java - 这个 Spring JSON 端点在 Jboss/Tomcat 中有什么问题?

spring-mvc - Thymeleaf 条件语句

java - 如何正确地将表单绑定(bind)到@ManyToOne结构并保存到数据库。 Spring MVC、 hibernate