JSON - Spring MVC:如何将 json 数据发布到 Spring MVC 控制器

Posted

技术标签:

【中文标题】JSON - Spring MVC:如何将 json 数据发布到 Spring MVC 控制器【英文标题】:JSON - Spring MVC : How to post json data to spring MVC controller 【发布时间】:2013-01-11 10:54:51 【问题描述】:

我在将 JSON 数据从 jsp 发布到 controller 时遇到问题。每次我尝试都会收到一个 ajax 错误Bad Request。我对 JSON 很陌生,我真的不知道我做错了什么。我搜索并尝试了一些可以在此站点中找到的示例,但仍然遇到问题。

在我的控制器中:

@RequestMapping (method = RequestMethod.POST, headers ="Accept=application/json", value = "/form")
public String postJournalEntry (@RequestParam ("json") String json, Model model) 
    System.out.println(json);
    return "successfullySaved";

在我的jsp中:

$("#btnPostGlEntry").click(function () 
    var glEntries = '"glEntries":["generalLedgerId":"1","accountId":"4","amount":"344.44","description":"Test Entry","debit":"Yes"]';
    $.ajax(
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        url: contextPath + "/generalLedger/journalEntries/form",
        data : JSON.stringify(glEntries),
        success: function(data) 
            alert("Success!!!");
        ,
        error: function (jqXHR, textStatus, errorThrown) 
            alert(jqXHR + " : " + textStatus + " : " + errorThrown);
        
    );
);

注意:我什至不确定我在控制器中的功能是否正确。我认为我的控制器和我的 ajax 是错误的。请帮忙。

【问题讨论】:

【参考方案1】:

如果您希望将 JSON 反序列化为某个类,则必须定义这样的方法(并且不要忘记添加 jsonConverter,如上一个答案):

.... method(@RequestBody MyClass data) ... 

但是,如果您希望您的方法接受 JSON 作为字符串,则不要这样做:

.... method(@RequestBody String json) ... 

所以,基本上,如果您发布 JSON,则意味着 JSON 不是参数,它是请求的主体。最终你必须使用@RequestBody 注解,而不是@RequestParam。

你可以在这里找到 Spring Mvc 和 JSON 的精美视频教程:sites.google.com/site/upida4j/example

【讨论】:

【参考方案2】:

您似乎没有正确配置 Json 转换器

喜欢这个

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
  <list>
    <ref bean="jacksonMessageConverter"/>
  </list>
</property>
</bean>

【讨论】:

以上是关于JSON - Spring MVC:如何将 json 数据发布到 Spring MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-framework 如何自动将对象返回成json格式

JSON - Spring MVC:如何将 json 数据发布到 Spring MVC 控制器

如何使用 mvc spring 将 JSON 数组插入 MySQL

如何将 Json 对象从 ajax 传递到 spring mvc 控制器?

Spring mvc jackson json mapper-如何将unicode编码应用于json响应中的特殊字符

带有 MVC 的 Spring 3 JSON