Java 应该如何';缺失';请求头是否由Spring引导控制器处理?
我正在编写一个Spring启动应用程序。我的控制器有2个自定义请求头。我执行了几个测试,结果发现我的应用程序在头不存在时返回“404” 然而,我期望这会导致“400”错误 有人能详细说明为什么会发生这种情况吗?我该如何妥善处理?就像在告诉服务的消费者报头丢失一样Java 应该如何';缺失';请求头是否由Spring引导控制器处理?,java,spring-boot,spring-mvc,error-handling,controller,Java,Spring Boot,Spring Mvc,Error Handling,Controller,我正在编写一个Spring启动应用程序。我的控制器有2个自定义请求头。我执行了几个测试,结果发现我的应用程序在头不存在时返回“404” 然而,我期望这会导致“400”错误 有人能详细说明为什么会发生这种情况吗?我该如何妥善处理?就像在告诉服务的消费者报头丢失一样 @RestController("fundsConfirmationController") @RequestMapping( value="/accounts/{accountId}/funds-confirmations",
@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) { ... }
@RestController(“资金确认控制器”)
@请求映射(
value=“/accounts/{accountId}/funds confirmations”,
头文件={“X-CAF-MSGID”,“X-AccessToken”}
)
公共类FundsConfigurationController实现FundsConfigurationControlleri{
私人基金确认服务I基金确认服务;
@自动连线
公共资金确认控制员(资金确认服务I资金确认服务){
this.fundsConfirmationService=fundsConfirmationService;
}
@GetMapping(
consumes=MediaType.APPLICATION\u JSON\u值,
products=MediaType.APPLICATION\u JSON\u值
)
公共响应资金确认(@RequestHeader(value=“X-CAF-MSGID”)字符串消息ID,
@RequestHeader(value=“X-AccessToken”)字符串AccessToken,
资金确认请求请求参数{…}
2个解决方案也可以这样做
首先将@RequestHeader
与required
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
}
}
有两种解决方案可以做到这一点 首先将
@RequestHeader
与required
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是对没有所述标头的请求的适当响应。感谢您的响应。默认情况下,HTTP标头用于定义端点。它们是进一步的规范,因此404是对HTTP标头的适当响应r没有上述标题的请求。感谢您的回复。