2013-08-14 6 views
3

Похоже, Spring MVC не знает, как отобразить JavaScript «карту» на карте объекта JavaAjax пройти «Map» объект Spring MVC контроллер

В веб-интерфейсе, скажем, foo.jsp ,

<script> 
var myMap = {}; 
myMap["people"] = ["Alex","Bob","Charles","Dave"]; 
myMap["fruit"] = ["Apple","Orange"]; 
$.ajax({ 
     type : "POST", 
     url : "/myURL", 
     data : "myMap=" + myMap, // I tried "myMap="+JSON.stringify(myMap), as well, it doesn't work neither 
     success : function(response) { 
      alert("Success! response = " + response); 
     }, 
     error : function(e) { 
      alert("AJAX error"); 
     } 
}); 
</script> 

на стороне сервера, у меня есть класс модели данных только для получения данных из веб-интерфейса

@Setter @Getter 
class Parameters { 
    private Map<String, List<String>> myMap; //this is the java class I want to map the string to 
} 

И в контроллере,

@RequestMapping(value = "/myURL", method = RequestMethod.POST) 
@ResponseBody 
public List<String> fooControl(Parameters parameters) { 
    // do something with parameters ... 
} 

Ошибка я на стороне сервера, как,

[tomcat:launch] Aug 14, 2013 3:12:37 PM org.apache.catalina.core.StandardWrapperValve invoke 
[tomcat:launch] SEVERE: Servlet.service() for servlet dispatcher threw exception 
[tomcat:launch] org.springframework.validation.BindException: 
org.springframework.validation.BeanPropertyBindingResult: 1 errors 
[tomcat:launch] Field error in object 'Parameters ' on field 
'myMap': rejected value [{"people":["Alex","Bob","Charles","Dave"],"fruit":  
["Apple","Orange"]}]; codes  
[typeMismatch.repairInfomationParametersExperimental.constraints,typeMismatch.constraints,typeMismatch.java.util.Map,typeMismatch]; arguments 
[org.springframework.context.support.DefaultMessageSourceResolvable: codes 
[repairInfomationParametersExperimental.constraints,constraints]; arguments []; default message 
[constraints]]; default message [Failed to convert property value of type 'java.lang.String' to 
required type 'java.util.Map' for property 'constraints'; nested exception is 
java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type 
[java.util.Map] for property 'myMap': no matching editors or conversion strategy found] 

Я предполагаю, что есть способ сказать Spring, как отобразить этот формат JSON натянуть Java Map?

Спасибо!

ответ

4

Изменять JavaScript коды:

$.ajax({ 
    type : "POST", 
    url : "/myURL", 
    contentType: "application/json", 
    data : JSON.stringify(myMap) // ..... 

Modify стороне сервера Java коды:

@RequestMapping(value = "/myURL", method = RequestMethod.POST, consumes="application/json") 
@ResponseBody 
public List<String> fooControl(@RequestBody Map<String, List<String>> myMap) { 
    // do something with parameters ... 
} 
0

Я сдавшим объект Map на Java, используя код ниже:

Javascript Код:

var values = { 
        "object1" : JSON.stringify(object1), 
        "object2" : JSON.stringify(object2) 
      }; 
var response = $http.post(url,data); 

сервера Код Side:

@RequestMapping(value = "/deleteData",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseBody 
    public Result deleteData(@RequestBody HashMap<String, Object> dataHashMap) { 
    Object1 object1= (Object1) JsonConvertor.jsonToObject((String) dataHashMap.get("object1"), Object1.class); 
     Object2 object2= (Object2) JsonConvertor.jsonToObject((String) dataHashMap.get("object2"), Object2.class); 
} 
Смежные вопросы