1

当我使用@RequestBody 并通过AJAX 从前端传递 json 以及该对象的所有参数时,它可以工作。

例如:@RequestBody Person person
其中 person 是一个包含姓名和电话信息的 bean。因此,当我从前端传递带有姓名和电话信息的 json 时,它工作正常。

但是当我在 json 中添加另一个与 person 对象无关的参数(如 post_id)时,它不起作用。它给了我错误说明“客户端发送的请求在语法上不正确()”

注意:我还在spring和jquery ajax中添加了consumes =“application/json”produces =“application/json” ,我添加了contentType:“application/json”

4

1 回答 1

1

您必须在 Jackson 使用的 ObjectMapper 上设置一个参数:

objMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

这是在 Spring MVC 中设置它的一种方法:

以这种方式定义自定义对象映射器:

import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper(){
        super.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        super.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

}

注册此自定义 ObjectMapper:

<mvc:annotation-driven > 
   <mvc:message-converters register-defaults="false">
       <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
           <property name="objectMapper">
               <bean class="....CustomObjectMapper"/>
           </property>
       </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

此外,在您的请求中,您需要有一个“application/json”的“Accept”标头

于 2012-07-29T22:02:59.063 回答