gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:50:52 25 4
gpt4 key购买 nike

目前我正在开发一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com