【问题标题】:Spring MVC : JSON to Pojo conversion throwing HTTP 415 ErrorSpring MVC:JSON 到 Pojo 转换抛出 HTTP 415 错误
【发布时间】:2015-12-25 22:28:10
【问题描述】:

我正在我的 jQuery 中构建以下 JSON 并通过 ajax 发送到控制器

var jsonResponse = [];

$(columns).each(function() {
     if(!isEmpty($(this))) {
          var lang = $(this).find(".language").val();
          var item = {
              "label": label,
              "language": $(this).find(".language").val(),
              "value": $(this).find(".value").val()
         };
         jsonResponse.push(item);
    }
 });

由于它是单个项目的数组,我需要将它映射到我的控制器中的 ArrayList。

我的模型对象是这样的: FormModel - 映射到 item JSON 元素

class FormModel {
    String label;
    String language;
    String value;
    // getters & setters
}

FormModelWrapper - 映射到array of items

    class FormModelWrapper {
    private List<FormModel> formModel;
    // getters & Setters
}

最后是控制器:

@RequestMapping(value = View Name, method = RequestMethod.POST)
public String performTask( @RequestBody FormModelWrapper wrapper) {

...
}

我已正确配置 Jackson。我实际上已经通过发送 JSON item 元素并在 FormModel 中接受它来验证它。当我使用 json 元素数组时发生 415 错误。

任何帮助将不胜感激。

【问题讨论】:

  • 开启 Spring DEBUG 日志,看看它说了什么。
  • 两个问题:好奇:为什么你需要一个映射器而不是 List 因为@RequestBody 不起作用? 2. content-type - 既被控制器接受又被客户端发送?
  • @prabugp 我尝试使用 List 不起作用。然后我跟着这个:stackoverflow.com/questions/23012841/… 2. 由客户端 'application/json' 发送我没有任何控制权
  • 请添加有关如何从 Ajax 请求中请求控制器操作的更多详细信息?!以及您是如何传递 JSON 格式的?
  • @prabugp 当我将它从 FormModelWrapper 改回 List 时它起作用了。需要弄清楚我之前错过了什么。谢谢顺便说一句:)

标签: java jquery json spring-mvc http-status-code-415


【解决方案1】:

我在这里和那里更改了很多东西,所以我不确定最初是什么导致了错误。这是我的有效解决方案:

jQuery:

var jsonResponse = [];

$(columns).each(function() {
 if(!isEmpty($(this))) {
      var lang = $(this).find(".language").val();
      var item = {
          "label": label,
          "language": $(this).find(".language").val(),
          "value": $(this).find(".value").val()
     };
     jsonResponse.push(item);
}
});

$.ajax({
        url: "actual_url",
        type: "POST",
        dataType: 'json',
        contentType:'application/json',
        data: JSON.stringify(jsonResponse),
        success: function(result) {
           alert(" Call Succeeded");
        },
        error: function(jqXHR, ajaxOptions, thrownError) {
            alert("Call Failed, " + thrownError);
        }
    });

接下来,我们将表单模型映射到 jQuery 中的 item 元素

class FormModel {
    String label;
    String language;
    String value;
    // getters & setters
}

这是使用 FormModel 的控制器

@RequestMapping(value = viewName, method = RequestMethod.POST)
public String doTask( @RequestBody List<FormModel> data) {
    //your code here
}

我正在使用Jackson to do the JSON to POJO mapping

在我的spring-context.xml 中,我有Jackson View Resolver as default View for the View Resolver

<property name="defaultViews">
        <list>
            <bean
                    class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        </list>
    </property>

最后是Jackson配置,这也在servlet-context.xml

<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>

此代码有效,至少对我而言。希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多