【问题标题】:Rest request gives 400 bad request when Hibernate4Module use in Spring 4.0.8.RELEASE + Hibernate 4.3.7.Final + 2.3.0 com.fasterxml.jackson当 Hibernate4Module 在 Spring 4.0.8.RELEASE + Hibernate 4.3.7.Final + 2.3.0 com.fasterxml.jackson 中使用时,休息请求给出 400 个错误请求
【发布时间】:2015-05-29 02:35:48
【问题描述】:

我有一个下面的控制器

@RequestMapping(value = "/getOptimizeLoggerByCP/{cpId}", method = RequestMethod.POST)
    public @ResponseBody DataTablesResponse<MessageLogger> getOptimizeLoggerByCP(HttpServletRequest request, @PathVariable String cpId,@RequestBody String json) {
        }
}

我还在下面写了不加载休眠惰性对象的消息转换器

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.gridscape.ocppserver.dao.impl.HibernateAwareObjectMapper" />
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

public class HibernateAwareObjectMapper extends ObjectMapper {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public HibernateAwareObjectMapper() {
        Hibernate4Module hm = new Hibernate4Module();
        registerModule(hm);
    }
}

当我从 applicationContext.xml 中删除消息转换器时,控制器工作,但是当我添加消息转换器时,控制器停止工作,因为当我请求控制器时我收到 400 错误请求。我从其余部分调用以下详细信息客户

url:- getOptimizeLoggerByCP/REE001
method:- POST
Content-Type:- application/json
Body:-{
    "start": 1,
    "length": 1,
    "draw": 1
}

【问题讨论】:

  • 当杰克逊无法在提交的数据和@RequestBody 参数之间进行映射时,Spring 会发出400。您可能需要将 json 主体映射到实际对象而不是 String
  • 那么为什么当我删除消息转换器时它会起作用
  • 可能是因为休眠模块不想从具有 3 个字段的对象创建字符串。测试映射到与您发送的数据实际对应的类。

标签: java rest jackson spring-4 hibernate-4.x


【解决方案1】:

解决方法:- 我将 @RequestBody String json 替换为对应于字符串 json 的实际对象,即 @RequestBody DataTablesRequest&lt;MessageLogger&gt; dataTableRequest

@RequestMapping(value = "/getOptimizeLoggerByCP/{cpId}", method = RequestMethod.POST)
        public @ResponseBody DataTablesResponse<MessageLogger> getOptimizeLoggerByCP(HttpServletRequest request, @PathVariable String cpId,@RequestBody DataTablesRequest<MessageLogger> dataTableRequest) {
        }

但我仍然需要了解如何使用@RequestBody String json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2021-10-30
    • 2017-01-22
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多