Ajax Отправить запрос в Spring MVC

Я использую ajax и spring mvc в своем приложении. Когда пользователи нажимают кнопку регистрации, в моем контроллере, называемом UserController, работают следующие коды :

@RequestMapping(value = "/registration", method = RequestMethod.GET)
public ModelAndView registrationPage() {
    ModelAndView model = new ModelAndView();
    model.setViewName("registration");
    return model;
}

Страница регистрации (registration.jsp) содержит форму. Я использую запрос ajax на этой странице. Ниже приведен код jjery ajax:

function ajaxPostForUsername() {
var contextPath = "<%= request.getContextPath()%>";
var username = $('#userName').val();
$.ajax({
        type: 'POST',
        url: contextPath + "/registration",
        data: {username: username},
        dataType: 'json',
        contentType : "application/json",
        success: function(response) {
                console.log(response);
                if (response == "USER_EXIST") {
                    $('.username-message').html("Username is exist.Please enter another!").css('color', 'red')
                    }
                else {
                    $('.username-message').html("Valid username").css('color', 'green');
                    }
            }
    })

}

и использование в форме:

<input type="text" id="userName" name="userName" placeholder="User Name" onblur="ajaxPostForUsername()" class="form-control"  autofocus>

В контроллере под названием RegistrationController:

@RequestMapping(value = "/registration", method = RequestMethod.POST)
@ResponseBody
public String validateUsername(@RequestBody String username) {
    String jsonData = "USER_NOT_EXIST";
    if (userService.isUsernameExist(username)) {
        jsonData = "USER_EXIST";
    }
    return jsonData;
}

как это. Я добавил зависимости Джексона в мой pom.xml:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.7.4</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.7.4</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.7.4</version>
    </dependency>

Поэтому, когда я пишу имя в поле имени пользователя, ответ:

HTTP Status 405 - Request method 'POST' not supported

и консоль Java показывает:

WARNING: Handler execution resulted in exception: Request method 'POST' not supported.

Похоже, что запрос работает правильно, как вы видите на картинке. Ответ на запрос

У меня есть поиск, но я не смог ее решить. Кто-нибудь может сказать мне, в чем проблема? (PS: я использовал Spring Security и добавил это в моей форме <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>)

1 ответ

Вы должны добавить это в ваш запрос AJAX

beforeSend: function(xhr) {
                    xhr.setRequestHeader(header, token)
                  },

и это к вашему html:

<meta name="_csrf" content="${_csrf.token}"/>
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
Другие вопросы по тегам