【问题标题】:Sending list in JSON request在 JSON 请求中发送列表
【发布时间】:2013-02-26 21:00:45
【问题描述】:

我将 JSON 中的几个“字段”和“列表”发送到 Spring MVC 控制器,如下所示:

    var data = {
        'message' : 'Text data',
        '**listOfIds**' : '350234983, 378350950',

        'synchronizerToken' : formTokenId

};

$.ajax({
        url : 'testURL.do',
        type : 'post',
        data : data,
        cache : false,
        dataType : 'json',

        success : function (jsonResponse) {},

        error : function (error) {}
});

在 Spring MVC 控制器中,URL 处理程序如下所示:

    @RequestMapping(value = "/testURL.do", method = RequestMethod.POST)
public ModelAndView executeTest( ListData listData) {
        ModelAndView    modelAndView    = null;
        JsonResponse    jsonResponse    = null;

        modelAndView    = executeTransaction(listData);
        } 

        return modelAndView;
    }


ListData.java

public class ListData{
    private String          message;
    private List<String>    **listOfIds** = new ArrayList<String>();   

//getter/setters

问题是 listOfIds 未作为列表返回。 它作为单个字符串返回 '350234983, 378350950'

任何人都可以建议这里是否有任何问题,或者有没有更好的方法来接收 JSON 响应中的列表?

谢谢, -方达

【问题讨论】:

    标签: java json spring spring-mvc


    【解决方案1】:

    使 listOfIds 成为字符串数组而不是单个字符串。

    'listOfIds' : ['350234983', '378350950'],
    

    【讨论】:

    • 我最初尝试过,但我得到了这个:java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    • 是不是因为java中的对象定义不正确:private ListlistOfIds = new ArrayList();
    【解决方案2】:

    1.)

    Add gson jar 
    
    import com.google.gson.Gson;//import
    
    Gson gson = new Gson();//create instance
    
    gson.toJson(ListData);//convert it to json
    

    2.)

    定义下面的bean从控制器返回jsonView。

    <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"/>
    

    控制器

    import org.springframework.ui.ModelMap;
    
    @RequestMapping(value = "/testURL.do", method = RequestMethod.POST)
    public String executeTest(ModelMap model, ListData listData) {
        ModelAndView    modelAndView    = null;
        JsonResponse    jsonResponse    = null;
        modelAndView    = executeTransaction(listData);
        model.addAttribute("paramName", modelAndView);
        } 
    
        return "jsonView";
    }
    

    ajax 的变化

    $.ajax({
        url : 'testURL.do',
        type : 'post',
        data : data,
        cache : false,
        dataType : 'json',
    
        success : function (jsonResponse) {
           var jsonValue = $.parseJSON(jsonResponse.paramName);
        },
    
        error : function (error) {}
    });
    

    mvc-servlet.xml 中的viewsResolver 配置

    <bean class="org.springframework.web.servlet.view.XmlViewResolver">
       <property name="location">
           <value>/path/views.xml</value>
       </property>
    </bean>
    

    【讨论】:

    • 谢谢,但我们没有使用 Gson。我们正在使用杰克逊
    • 第2点与gson无关,是spring
    • 好的,谢谢,所以只要在 xml 文件中定义这个视图就可以自动映射了?或者我需要在控制器中做额外的处理?
    • @dfsfsdfsdfsdfsdf 随意将其标记为答案,如果答案满意,请单击上行链接。
    猜你喜欢
    • 2016-04-08
    • 2018-02-16
    • 2018-02-07
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多