【问题标题】:issue with @RequestBody when i pass json当我通过json时@RequestBody出现问题
【发布时间】:2012-07-27 14:51:33
【问题描述】:

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

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

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

注意:我还在 spring 和 jquery ajax 中添加了 consumes = "application/json"produces = "application/json" 我添加了 contentType : “应用程序/json”

【问题讨论】:

    标签: jquery ajax spring spring-mvc


    【解决方案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”标头

    【讨论】:

    • 我有 Jackson Http 消息,是否认为在 json 中添加一个不在对象中的参数会导致 requestBody 出现问题?
    • 是的,这就是这个参数的 javadoc 所说的: > 确定是否遇到未知属性的特征(那些不映射到属性的,并且没有“任何设置器”或处理程序可以处理它)是否会导致失败(通过抛出 JsonMappingException)。此设置只有在尝试了所有其他未知属性的处理方法后才生效,并且属性保持未处理状态。
    • 我应该把objectMapper配置在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多