Как добавить собственный метод HTTP / глагол в Spring-MVC, используя @RequestMapping - PullRequest
0 голосов
/ 18 мая 2019

Мне нужно добавить собственный метод HTTP / глагол в URI. Мне нужно что-то вроде этого:

@RequestMapping(value = "/device", method = "CAPTURE")

Короче, этот запрос должен работать curl -X CAPTURE http://localhost:4591/device

Насколько я понимаю, @RequestMapping принимает только стандартизированные методы HTTP, поэтому какие варианты у меня есть, чтобы добиться этого.

1 Ответ

3 голосов
/ 18 мая 2019

Вы не можете этого сделать.Вы должны использовать стандартизированные методы HTTP.Вы можете создавать собственные конечные точки без HTTP-метода, поэтому каждый запрос будет принят.(Конечно, следуя некоторым правилам, но я не думаю, что это тема вопроса)

@RequestMapping(value = "/device")

Или вы можете использовать HTTP-заголовки, чтобы разрешить / заблокировать запросы.Вам просто нужно создать фильтр в вашем приложении.Примерно так:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {


    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, CAPTURE");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            String captureHeader = request.getHeader("CAPTURE");
            if (StringUtils.isEmpty(captureHeader)) {
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);                   
            }else{
               chain.doFilter(req, res); 
            }
        }
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}

Полагаю, с помощью фильтра вы сможете делать то, что пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...