java - 发送比预期更多的 JSON 时,Spring MVC 返回 HTTP 400

标签 java ajax json spring spring-mvc

目前我正在开发一个 ajax 应用程序,它通过 JSON 将 HTTP PUT 请求发送到 Spring 3.2 MVC Controller 。

除了您的 JSON 数据与预期的 @RequestBody 类不完全匹配的情况外,一切正常:

@RequestMapping(value = "/{companyId}", method = RequestMethod.PUT)
public void update(@PathVariable long companyId, @Valid @RequestBody AdminCompanyForm adminCompanyForm) {
    adminCompanyService.updateCompany(companyId, adminCompanyForm);
}

例如,假设我们要发送一个包含 idname 字段的 JSON 对象,但是 @RequestBody 对象只包含一个名为 name< 的字段

在这种情况下,Spring MVC 将发送 HTTP 400 响应代码(即 Bad Request),而不会发送任何其他形式的错误消息。解决方案是更改我们的 Javascript 代码,使 JSON 数据仅包含一个 name 字段。这样做时,一切都会完美无缺。

我的问题是:当太多 JSON 发送到我的一个 Controller 上的 HTTP PUT 操作时,我如何告诉 Spring 不要发送 HTTP 400 错误?当通过 JSON 发送额外的 id 字段时,我希望 Spring 简单地忽略它。我不希望它太严格。老实说,必须手动删除 JSON 字段以准确匹配服务器的预期非常耗时,我想让我的生活更轻松。

有什么办法可以实现我想要的吗?

谢谢!

最佳答案

配置对象映射器,

ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

您可以使用此对象映射器编写一个简单的测试用例。它将忽略未识别的字段。

现在我们需要配置 spring mvc 来使用这个自定义对象映射器。您可以编写一个返回 ObjectMapper 的工厂 bean:

<mvc:annotation-driven>
<mvc:message-converters>
    <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="objectMapper" ref="jacksonObjectMapper" />
    </bean>        
</mvc:message-converters>
</mvc:annotation-driven>

 <bean id="jacksonObjectMapper" class="yourCustomObjectMapper" />

关于java - 发送比预期更多的 JSON 时,Spring MVC 返回 HTTP 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371390/

相关文章:

java - 在 Json 数组中搜索值

java - 响应数据未显示

ajax - Mavericks OS 升级后,无法再使用 OPTIONS 动词发出任何 HTTP 请求

Jquery加载内容从右侧滑入/滑出

javascript - Ajax 调用后页面卡住

python - 如何解析json数据并将其加载到django模板中

java - 具有 JavaFx 进度条行为的 Pb

java - 单词错误率可以帮助分析口吃吗?

java - 在 GWT JSONP 请求中指定 "Accept:" header 参数

javascript - 如何使用 jQuery 动态更改基于 JSON 文件的数据