Я пишу приложение 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 решения, чтобы сделать то же самое.
Первое использование @RequestHeader с requiredfalse
@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 является подходящим ответом для запроса без указанных заголовков. Спасибо за ответ.