Как контроллер загрузки Spring должен обрабатывать «отсутствующие» заголовки запросов?

Я пишу приложение 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) { ... }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
3 618
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 является подходящим ответом для запроса без указанных заголовков. Спасибо за ответ.

TomBrx 19.03.2019 16:17

Другие вопросы по теме