【发布时间】: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