2016-07-24 4 views
0

J'utilisant ajax et mvc de printemps dans mes utilisateurs application.When clique bouton Enregistrer, ci-dessous codes ne fonctionnent pas dans ma classe de contrôleur appelé UserController:demande Ajax Post Spring MVC

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

la page d'inscription (inscription. jsp) contient un formulaire. J'ai utiliser la requête ajax dans cette page. Ci-dessous le jquery code 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'); 
        } 
      } 
    }) 

}

et l'utilisation est sous la forme:

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

Dans le contrôleur appelé 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; 
} 

comme ce. J'ai ajouté les dépendances jackson dans mon 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> 

Alors, quand j'écris un nom dans le champ de nom d'utilisateur, la réponse est:

HTTP Status 405 - Request method 'POST' not supported 

et la console java montre:

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

Il semble que la requête fonctionne correctement, comme vous pouvez le voir sur l'image. Request-Response

Je l'ai cherché mais je n'ai pas pu le résoudre.Quelqu'un peut-il me dire quel est le problème? (PS: j'utiliser la sécurité du printemps et a ajouté dans ma forme <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>)

Répondre

1

ans doit ajouter à votre demande ajax

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

et ceci à votre HTML:

<meta name="_csrf" content="${_csrf.token}"/> 
    <meta name="_csrf_header" content="${_csrf.headerName}"/>