2015-03-25 34 views
1

我有以下控制器REST请求给予400错误的请求时Hibernate4Module春4.0.8.RELEASE + Hibernate中使用4.3.7.Final + 2.3.0 com.fasterxml.jackson

@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 
} 
+0

春天问题当jackson无法在提交的数据和'@ RequestBody'参数之间进行映射时,会生成'400'。您可能需要将您的json主体映射到实际对象而不是“String”。 – beerbajay 2015-03-25 12:19:07

+0

那么为什么它在我删除消息转换器时起作用 – Mahesh 2015-03-25 12:29:49

+1

可能是因为hibernate模块不想从具有3个字段的对象创建字符串。测试映射到与您正在发送的数据实际相符的类。 – beerbajay 2015-03-25 13:11:54

回答

0

解决方法: - 我更换@RequestBody String json到对应于字符串实际对象的JSON即@RequestBody DataTablesRequest<MessageLogger> dataTableRequest

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

但我仍然需要找出如何使用@RequestBody JSON字符串