2015-07-10 107 views
1

我知道这个问题已经被问过很多次了,虽然我尝试了已经说过的话,但我仍然有这个问题。 我正试图生成一个简单的JSON响应工作。现在我得到406不可接受的错误。 Tomcat说:“这个请求标识的资源只能根据请求”接受“头文件生成不可接受的特征的响应。” 在tomcat/lib我有jackson罐子。我使用Spring 1.1.0和Tomcat 7 我addedd在pom.xml的依赖关系:406不可接受:Spring MVC + JSON

<dependencies> 
<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-core</artifactId> 
<version>2.4.1</version> 
</dependency> 

<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-databind</artifactId> 
<version>2.4.1.1</version> 
</dependency> 

<dependency> 
<groupId>org.codehaus.jackson</groupId> 
<artifactId>jackson-core-asl</artifactId> 
<version>1.9.13</version> 
</dependency> 

<dependency> 
<groupId>org.codehaus.jackson</groupId> 
<artifactId>jackson-mapper-asl</artifactId> 
<version>1.9.13</version> 
</dependency> 
</dependencies> 

CompaniesRestController.java

@RequestMapping(value = "/Companies", method = RequestMethod.GET) 
    @ResponseBody 
    public List<Companies> listCompaniess() { 
     return new java.util.ArrayList<Companies>(companiesService.loadCompaniess()); 
    } 

我在applicationContext.xml添加此代码段如在所描述的:reference

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <util:list id="beanList"> 
     <ref bean="stringHttpMessageConverter"/> 
     <ref bean="marshallingHttpMessageConverter"/> 
     </util:list> 
    </property 
</bean> 

<bean id="stringHttpMessageConverter" 
     class="org.springframework.http.converter.StringHttpMessageConverter"/> 

<bean id="marshallingHttpMessageConverter" 
     class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
    <property name="marshaller" ref="castorMarshaller" /> 
    <property name="unmarshaller" ref="castorMarshaller" /> 
</bean> 

但徒劳无益,没有任何工作。

我会很感谢您的建议。

PS:我用脚手架来生成我的CRUD应用程序。

-Regards

其实,当我编辑 CompaniesRestController.java

@RequestMapping(value = "/Companies", method = RequestMethod.GET) 
    @ResponseBody 
    public String<Companies> listCompaniess() { 
     return new java.util.ArrayList<Companies>(companiesService.loadCompaniess()).toString(); 
    } 

@RequestMapping(value = "/Companies", method = RequestMethod.GET,produces="application/json") 

    public @ResponseBody Object[] listCompaniess() { 
     return new java.util.ArrayList<Companies>(companiesService.loadCompaniess()).toArray(); 

    } 

我不再有406error,我得到包含数组记录我在我的数据库中,但作为一个数组,不是一个JSON ...

我试过如果使用JSONObject,但仍然有相同的问题,我用脚手架来创建我的spring mvc应用程序,然后将其转换为Maven项目以添加jackson库和依赖项,但是当我cenvert它,所有的项目坍塌并引发以下错误:

2015-07-15 17:32:31,299 INFO [localhost-startStop-1] LobCreatorBuilder - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 
2015-07-15 17:32:31,314 WARN [localhost-startStop-1] JtaPlatformInitiator - HHH000427: Using deprecated org.hibernate.transaction.TransactionManagerLookup strategy [hibernate.transaction.manager_lookup_class], use newer org.hibernate.service.jta.platform.spi.JtaPlatform strategy instead [hibernate.transaction.jta.platform] 
2015-07-15 17:32:31,314 INFO [localhost-startStop-1] JtaPlatformInitiator - HHH000428: Encountered legacy TransactionManagerLookup specified; convert to newer org.hibernate.service.jta.platform.spi.JtaPlatform contract specified via hibernate.transaction.jta.platform setting 
2015-07-15 17:32:31,314 INFO [localhost-startStop-1] ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory 
2015-07-15 17:32:31,361 INFO [localhost-startStop-1] Version - Hibernate Validator 4.2.0.Final 
2015-07-15 17:32:31,642 INFO [localhost-startStop-1] TransactionFactoryInitiator - HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory 
No properties path set - looking for transactions.properties in classpath... 
transactions.properties not found - looking for jta.properties in classpath... 
Using init file: /D:/Users/ielhazit/Workspaces/MyEclipse%202015%20CI/.metadata/.me_tcat7/webapps/chouette/WEB-INF/classes/jta.properties 
juil. 15, 2015 5:32:32 PM org.apache.catalina.core.ApplicationContext log 
Infos: Initializing Spring FrameworkServlet 'chouette Servlet' 
2015-07-15 17:32:32,471 ERROR [localhost-startStop-1] FrameworkServlet - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) 
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1247) 
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1897) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.AbstractMethodError: org.hibernate.validator.engine.ConfigurationImpl.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider; 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:209) 
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:194) 
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.configureParameterNameProviderIfPossible(LocalValidatorFactoryBean.java:276) 
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:245) 
    at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564) 
    ... 32 more 

任何想法 谢谢

回答

0

可生产媒体类型映射的请求也可以由Spring的配置@RequestMapping

例如:@RequestMapping(value = "/list", method = RequestMethod.GET, produces = "application/json")

+0

我已经尝试过这个注释,但仍然有同样的问题。 – user1567118

+0

根据您更新的问题,您现在不会收到该错误,并且您获取的数据不是JSON格式。您可以通过两种方式使用JSON格式:1 - 返回您自己的Model对象而不是Object [] 2-如果您不想创建新的Model对象,请使用JSONObject。 –

+0

我拥有的项目真的很庞大,所以我无法承担编辑每个班级的费用,以便返回我自己的模型对象 *即使JSONObject不起作用,仍然有406错误 – user1567118