L'envoi de JSON pour contrôleur Spring MVC

Je suis en train d'envoyer JSON à un Contrôleur Spring MVC. Sur le Spring MVC côté, tout est correctement configuré.

Ci-dessous est le code, mais ne semble pas fonctionner:

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>  
<script type="text/javascript">
  $('#myForm').on('submit', function(e) { 
    e.preventDefault(); 
    var frm = $("#myForm"); 
    var dat = frm.serialize(); 
    $.ajax({ 
    type: 'POST', 
    url: $('#myForm').attr('action'), 
    data: dat, 
    contentType: 'application/json' 
    success: function(hxr) { 
        alert("Success: " + xhr); 
    } 
}); 
});   
 </script>   
</head>
<body>
<h2>Application</h2>
<form id="myForm" action="/application/save" method="POST" accept="application/json" onclick="i()">
                <input type="text" name="name" value="myName">
    <input type="submit" value="Submit">
</form>

Dans Tomcat j'obtiens l'erreur suivante:

org.springframework.web.servlet.mvc.de soutien.DefaultHandlerE
xceptionResolver handleNoSuchRequestHandlingMethod
AVERTISSEMENT: ne correspond Aucune méthode de gestionnaire d'trouvé pour le servlet demande: chemin '/application/enregistrer", la méthode "POST", les paramètres de la carte['nom' -> tableau['nomutilisateur']]

Des idées où je vais mal? Je suis nouveau en JSON. Je suis en train d'envoyer JSON à Spring MVC contrôleur.

@Controller
@RequestMapping("/run/*")
public class HistoryController {

    @RequestMapping(value = "save", method = RequestMethod.POST, headers = {"content-type=application/json"})
public @ResponseBody Response save(@RequestBody User user) throws Exception {
    Response userResponse = new Response();
    System.out.println("UserId :" + " " + user.getName());
    return userResponse;
}
}

@RequestMapping(value = "find", method = RequestMethod.GET)
public @ResponseBody Response find() {
    System.out.println("Run");
    Response userResponse = new Response();
    userResponse.setVersionNumber("1.0");
    return userResponse;
}

Lors de l'appel d' /application/exécuter/enregistrer-je obtenir une réponse JSON. Cependant, l' @RequestBody ne fonctionne pas.


J'ai toujours pas eu de chance. Avoir lu certains nombre de problèmes similaires. L'exigence est que le serveur n'acceptera application/json types. Je suis à l'aide d'un Contrôleur Spring MVC. Comme mentionné précédemment, le code renvoie une réponse JSON via @ResponseBody. Je veux obtenir des informations via @RequestBody dans mon Contrôleur Spring MVC. Je suis à l'aide de JSP pour envoyer JSON à Spring MVC Contrôleur. Mon code et Spring MVC peut être vu ci-dessous:

Je suis nouveau sur le JSON et Javascript.

JSP - index.jsp

<%@page language="java" contentType="text/html"%>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>  
<script type="text/javascript">
    $('#myForm').on('submit', function(e) { 
    var frm = $("#myForm");
   var dat = JSON.stringify(frm.serializeArray()); 

$.ajax({ 
     type: 'POST', 
     url: $('#myForm').attr('action'), 
     data: dat,
     contentType: 'application/json',
     dataType: 'json',
     error: function() {
        alert('failure');
     }
     success: function(hxr) { 
         alert("Success: " + xhr); 
     }
  }); 
); 
}; 
</script> 
</head>
<body>
<h2>Application</h2>
<form id="myForm" action="/application/save" method="POST" accept="application/json" onclick="i()">
    <input type="text" name="userId" value="User">
    <input type="submit" value="Submit">
</form>
</body>
</html>

Lors de l'exécution de ce que je n'obtiens pas de sortie. Dans le Chrome-je obtenir de l'erreur 404 not found et dans Tomcat j'obtiens l'erreur suivante:

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver     handleNoSuchRequestHandlingMethod
WARNING: No matching handler method found for servlet request: path '/application/sa
 ve', method 'POST', parameters map['userId' -> array<String>['User']]

Est quelque chose de mal ici, dans la page JSP partie?

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
     version="2.5">

     <display-name>WebApp</display-name>

     <context-param>
        <!-- Specifies the list of Spring Configuration files in comma separated format.-->
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/service.xml</param-value>
     </context-param>

     <listener>
        <!-- Loads your Configuration Files-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

     <servlet>
        <servlet-name>application</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
     </servlet>

     <servlet-mapping>
        <servlet-name>application</servlet-name>
        <url-pattern>/</url-pattern>
     </servlet-mapping>

     <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>    
</web-app>

service.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<context:component-scan base-package="com.web"/>
<mvc:annotation-driven/>
<context:annotation-config/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean id="jacksonMessageChanger" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
<!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageChanger"/>
</list>
</property>
</bean>-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="jacksonMessageChanger"/>
</util:list>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
</bean>-->  
</beans>

Contrôleur

package com.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestBody;
import com.webchannel.domain.User;
import com.webchannel.domain.UserResponse;
@Controller
@RequestMapping("/application/*")
public class SaveController {
@RequestMapping(value = "save", method = RequestMethod.POST, headers = {"content-type=application/json"})
public @ResponseBody UserResponse save(@RequestBody User user) throws Exception {
UserResponse userResponse = new UserResponse();
System.out.println("UserId :" + " " + user.getUserId());
return userResponse;
}
@RequestMapping(value = "delete", method = RequestMethod.GET)
public @ResponseBody UserResponse delete() {
System.out.println("Delete");
UserResponse userResponse = new UserResponse();
userResponse.setSuccess(true);
userResponse.setVersionNumber("1.0");
return userResponse;
}
}

Lors de l'appel d' /application/supprimer-je obtenir JSON retourné. Donc je sais que mon JacksonProcessor est configuré correctement. Le problème est dans @RequestBody.

Où vais-je tort? S'il vous plaît aider moi.

  • dans votre code, vous ne semblent pas être de faire quelque chose avec créé dat. N'est-ce pas?
  • doit-il donc dans mon <form> tag dois-je avoir un paramètre, appelé <input type="nom">?
  • Ok, j'ai modifié. Veuillez voir ci-dessus et laissez-moi savoir où je vais mal. Il ne fonctionne toujours pas.
  • Pouvez-vous essayer de remplacer $(function i() { avec function i() { et });</script> avec }</script>?
  • J'ai essayé cette. Il ne fonctionne toujours pas. Vous ne savez pas quoi faire. J'ai ajouté ce qui suit: type: 'POST', url: 'localhost:8080/application/run', data: dat Essentiellement les et les virgules
  • Veuillez voir les changements ci-dessus.
  • Exactement pourquoi voulez-vous envoyer JSON? Quel est le béton à l'exigence fonctionnelle? Ne que Spring MVC contrôleur de n'accepter qu'un corps de la requête au format JSON au lieu de la norme application/x-www-form-urlencoded comme des formulaires standard et standard requêtes ajax envoyer? Concrètement, votre problème suggère que le contrôleur Spring MVC ne pas accepter un corps de la requête au format JSON à tous. Utilisez simplement var dat = frm.serialize(); de la manière habituelle, puis.

InformationsquelleAutor user1646481 | 2012-09-17