5

我在将 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 是错误的。请帮忙。

4

2 回答 2

11

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

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

但是,如果您希望您的方法接受 JSON 作为 String 比这样做:

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

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

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

于 2013-08-16T23:56:30.973 回答
4

看来您没有正确配置 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>
于 2013-01-28T06:35:20.730 回答