2014-07-15 32 views
1

我对Spring非常陌生Restful编程将控制器方法用作rest服务的要求,所以我试图以JSON格式返回一个对象,但对于某些原因,我得到的响应代码为500,在日志文件中没有错误和异常。使用@ResponseBody返回对象时的响应代码500

但它成功地工作,如果我返回类型是一个字符串,而对象的

我使用的是杰克逊的依赖关系,我在配置方面的文件,并在该对象转换为JSON一个假设格式以及使用注释@ResponseBody放在响应身体

//响应代码500如果我返回对象

@RequestMapping(value = "/donorSummary", method = RequestMethod.GET,produces = "application/json") 
    @PreAuthorize("hasRole('"+PermissionConstants.VIEW_DONOR+"')") 
    public @ResponseBody Donor donorSummaryGenerator(HttpServletRequest request, Model model,HttpServletResponse response, 
     @RequestParam(value = "donorId", required = false) Long donorId) { 

     //some code here 

     return donorObject; 

    } 

//工作,如果我返回字符串

@RequestMapping(value = "/donorSummary", method = RequestMethod.GET,produces = "application/json") 
     @PreAuthorize("hasRole('"+PermissionConstants.VIEW_DONOR+"')") 
     public @ResponseBody StringdonorSummaryGenerator(HttpServletRequest request, Model model,HttpServletResponse response, 
      @RequestParam(value = "donorId", required = false) Long donorId) { 

      //some oode here 

      return donorObject.toString(); 

     } 

ApplicationContext的文件

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:int="http://www.springframework.org/schema/integration" 
    xmlns:int-mail="http://www.springframework.org/schema/integration/mail" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
     http://www.springframework.org/schema/integration 
     http://www.springframework.org/schema/integration/spring-integration-2.2.xsd 
     http://www.springframework.org/schema/integration/mail 
     http://www.springframework.org/schema/integration/mail/spring-integration-mail-2.2.xsd 
     http://www.springframework.org/schema/util 
     http://www.springframework.org/schema/util/spring-util-2.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
     http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"> 

    <!-- Annotations like PreAuthorize, needed here and not in security-v2v-servlet.xml 
     as this is the MVC configuration dealing with URLs??? --> 
    <security:global-method-security pre-post-annotations="enabled" /> 
    <context:property-placeholder location="classpath:database.properties" /> 

    <!-- Configures the @Controller programming model --> 
    <mvc:annotation-driven /> 

    <context:component-scan base-package="controller" /> 
    <context:component-scan base-package="repository" /> 
    <context:component-scan base-package="model" /> 
    <context:component-scan base-package="viewmodel" /> 
    <context:component-scan base-package="tasks" /> 
    <context:component-scan base-package="utils" /> 
    <context:component-scan base-package="security" /> 

    <bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
     <value>classpath:messages</value> 
     </list> 
    </property> 
    </bean> 

    <bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
    </bean> 

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
      destroy-method="close"> 
     <property name="driverClass" value="${database.driver}" /> 
     <property name="jdbcUrl" value="${database.url}" /> 
     <property name="user" value="${database.user}" /> 
     <property name="password" value="${database.password}" /> 

     <!-- these are C3P0 properties --> 
     <property name="acquireIncrement" value="${database.acquireIncrement}" /> 
     <property name="minPoolSize" value="${database.minPoolSize}" /> 
     <property name="maxPoolSize" value="${database.maxPoolSize}" /> 
     <property name="maxIdleTime" value="${database.maxIdleTime}" /> 
    </bean> 

    <!-- persistence unit name comes from persistence.xml --> 
    <bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:dataSource-ref="dataSource" p:persistenceUnitName="v2v"> 
    <property name="jpaProperties"> 
     <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">none</prop> 
     <prop key="javax.persistence.validation.mode">none</prop> 
     </props> 
    </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <bean id="applicationContextProvider" class="repository.events.ApplicationContextProvider"></bean> 
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    </bean> 

    <mvc:interceptors> 
    <bean id="loggingInterceptor" class="interceptor.LoggingInterceptor" /> 
    </mvc:interceptors> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <task:executor id="executor" pool-size="5"/> 
    <task:scheduler id="scheduler" pool-size="5"/> 
    <task:annotation-driven scheduler="scheduler" executor="executor"/> 

    <property name="javaMailProperties"> 
     <props> 
     <prop key="mail.smtp.starttls.enable">true</prop> 
      <prop key="mail.smtp.auth">true</prop> 
     </props> 
    </property> 
    </bean> 

    <int:service-activator input-channel="receiveEmailChannel" 
         ref="emailReceiverService" 
         method="receive" /> 

    <int-mail:inbound-channel-adapter id="imapAdapter" 
    store-uri="imaps://${imap.username}:${imap.password}@imap.googlemail.com:993/INBOX" 
    java-mail-properties="javaMailProperties" 
    channel="receiveEmailChannel" 
    should-delete-messages="false" 
    should-mark-messages-as-read="false" 
    auto-startup="true" 
    > 



</beans> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>bsis</groupId> 
    <name>BSIS</name> 
    <description>(BSIS)</description> 
    <artifactId>bsis</artifactId> 
    <version>0.1</version> 
    <packaging>war</packaging> 

    <properties> 
     <webapp.name>bsis</webapp.name> 
     <cxf-version>2.2.10</cxf-version> 
     <liquibase.propertyFile>liquibase/liquibase.properties</liquibase.propertyFile> 
    </properties> 

    <build> 
     <finalName>${webapp.name}</finalName> 
     <sourceDirectory>src</sourceDirectory> 
     <testSourceDirectory>test</testSourceDirectory> 

     <resources> 
      <resource> 
       <directory>src</directory> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 

      </resource> 

     </resources> 

     <testResources> 
      <testResource> 
       <directory>test</directory> 
       <filtering>false</filtering> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.sql</include> 
       </includes> 
      </testResource> 
     </testResources> 

     <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.12</version> 
       <configuration> 
        <useFile>true</useFile> 
        <includes> 
         <include>**/*Tests.java</include> 
         <include>**/*Test.java</include> 

        </includes> 
        <excludes> 
         <exclude>**/Abstract*.java</exclude> 
        </excludes> 
        <reuseForks>false</reuseForks> 
        <forkCount>1</forkCount> 
        <junitArtifactName>junit:junit</junitArtifactName> 
        <parallel>methods</parallel> 
        <threadCount>10</threadCount> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <server>tomcat</server> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.0</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <webXml>${basedir}/war/WEB-INF/web.xml</webXml> 
        <warSourceDirectory>${basedir}/war</warSourceDirectory> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.liquibase</groupId> 
       <artifactId>liquibase-maven-plugin</artifactId> 
       <version>2.0.3</version> 
       <configuration> 
        <propertyFile>liquibase/liquibase.properties</propertyFile> 
       </configuration> 
       <executions> 
        <execution> 
         <id></id> 
         <phase>verify</phase> 
         <goals> 
          <goal>update</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-coyote</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-api</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-servlet-api</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-juli</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-util</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-catalina</artifactId> 
      <version>7.0.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.common</groupId> 
      <artifactId>hibernate-commons-annotations</artifactId> 
      <version>4.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-envers</artifactId> 
      <version>4.1.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.3.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
      <version>4.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>com.mchange</groupId> 
      <artifactId>mchange-commons-java</artifactId> 
      <version>0.2.3.3</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.22</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-instrument</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-instrument-tomcat</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jms</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-oxm</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>3.2.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.1.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>aopalliance</groupId> 
      <artifactId>aopalliance</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>antlr</groupId> 
      <artifactId>antlr</artifactId> 
      <version>2.7.7</version> 
     </dependency> 
     <dependency> 
      <groupId>c3p0</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>0.9.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-beanutils</groupId> 
      <artifactId>commons-beanutils</artifactId> 
      <version>1.8.3</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>3.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging-adapters</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging-api</artifactId> 
      <version>1.1</version> 
     </dependency> 
     //Jackson dependencies 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-core-asl</artifactId> 
      <version>1.9.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-acl</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-aspects</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>3.1.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.integration</groupId> 
      <artifactId>spring-integration-core</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.integration</groupId> 
      <artifactId>spring-integration-mail</artifactId> 
      <version>2.2.3.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-taglibs</artifactId> 
      <version>3.1.4.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.liquibase</groupId> 
      <artifactId>liquibase-core</artifactId> 
      <version>2.0.3</version> 
     </dependency> 
     <dependency>  
      <groupId>turbine</groupId> 
      <artifactId>turbine</artifactId>  
      <version>2.1</version> 
     </dependency> 
     <dependency>  
      <groupId>net.sf.opencsv</groupId> 
      <artifactId>opencsv</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>1.3.2</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit-dep</artifactId> 
      <version>4.8.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <version>1.9.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.github.springtestdbunit</groupId> 
      <artifactId>spring-test-dbunit</artifactId> 
      <version>1.0.0</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.dbunit</groupId> 
      <artifactId>dbunit</artifactId> 
      <version>2.4.9</version> 
      <scope>test</scope> 
      <exclusions> 
       <exclusion> 
        <artifactId>junit</artifactId> 
        <groupId>junit</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.jolbox</groupId> 
      <artifactId>bonecp</artifactId> 
      <version>0.8.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>2.2.8</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>sqltool</artifactId> 
      <version>2.0.0</version> 
     </dependency> 
     <!-- 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>6.8</version> 
      <scope>test</scope> 
     </dependency> 
     --> 
    </dependencies> 
</project> 
+0

你可以调试服务器端吗?请求是否触发了你的方法体? –

+0

在您发送带请求的“Accept”标头吗? –

+0

是它正在打击请求正文,因为我可以看到打印语句,直到返回语句@XtremeBiker –

回答

1

弹簧MVC从JSON(和其他格式,例如将数据转换为/ XML)使用消息转换器(接口的实现HttpMessageConverter)。

Spring配置中的<mvc:annotation-driven />标记注册了JSON消息转换器(以及它正在执行的操作)。你需要做的,开始在Web服务中使用JSON是将杰克逊库在classpath中唯一的其他东西(你说,你有他们的话):

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

现在,你也有一些手动配置您的JSON消息转换器:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 

<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
</bean> 

这可能是不必要的。尝试删除它。所有您需要注册JSON消息转换器的标签都是<mvc:annotation-driven />

+0

谢谢,是的,我删除它,你可以检查我的新编辑中添加的依赖项列表。 @Alexey –

+0

@SrikanthMalyala对于Spring 3.2和4.0,这是真的。我不知道你使用的Spring 3.1.2是否有任何区别。 – Alexey

+0

谢谢Alexey,我在请求方法中创建了一个虚拟对象,并返回它而不是返回Donor对象,它工作正常,我得到了JSON格式的响应,为了测试它我编写了手动将捐助对象转换为JSON格式使用ObjectMapper类然后我想出了这个异常“org.codehaus.jackson.map.JsonMappingException:无法初始化代理 - 没有会议(通过参考链:model.donor.Donor [”延期“]]” –

1

HTTP状态码500用于内部服务器错误。如果您正在创建其他Web服务,为什么不返回有效的Internet媒体类型,如JSON,XML或YAML。您可以使用jackson库将您的'Donor'引用映射到json/xml,然后从服务器返回它。在客户端,您可以再次使用jackson库将json/xml映射到Donor引用。

+0

是啊谢谢最后一个选择是使用jackson API手动转换对象并将其作为字符串返回 –

1

试试这个方法:

控制器:

@Controller 
@RequestMapping(value = "/testshare/service/location", produces = "application/json", consumes = "application/json") 
public class LocationController { 

    @Autowired 
    private IStaticContentService staticContentService; 

    /** 
    * Service method to retrieve all <b>Locations</b> detail. 
    * 
    * @return response LocationResponse 
    * @throws ApplicationException 
    */ 

    @RequestMapping(value = "/getAllLocations", produces = "application/json", method = RequestMethod.POST, consumes = "application/json") 
    @ResponseBody 
    public LocationResponse loadAllLocations(@RequestBody BaseRequest request) { 
     LocationResponse response; 

     try { 

      response = staticContentService.getAllLocation(); 
      response.header = ResponseBuilder.buildHeader(true); 

     } catch (ApplicationException e) { 
      response = ResponseBuilder.buildError(e, new LocationResponse()); 
     } catch (RuntimeApplicationException e) { 
      response = ResponseBuilder.buildResponse(e, new LocationResponse()); 
     } catch (Exception e) { 
      response = ResponseBuilder.buildResponse(e, new LocationResponse()); 
     } 

     return response; 
    } 

} 

BaseRequest类:

import org.codehaus.jackson.annotate.JsonProperty; 

public class BaseRequest { 
    @JsonProperty("header") 
    public Header header; 
} 

在Spring配置:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="1" /> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="json" value="application/json" /> 
       <entry key="file" value="multipart/form-data" /> 
      </map> 
     </property> 

     <property name="defaultViews"> 
      <list> 
       <!-- JSON View --> 
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
      </list> 
     </property> 
    </bean> 

Maven的依赖杰克逊 org.codehaus.jackson 杰克逊映射器 - 翔升 1.9.3

我有这样的检查与春天版3.2.2.RELEASE.Should工作更高的弹簧版本以及

+0

噢,好吧,我在这里使用spring版本3.1.2.RELEASE。 –

+0

sure.Please让我知道它是否可以解决您的问题 –

+0

序列化实体对象造成映射异常,这些未在日志文件中显示,所以序列化或返回视图对象,而不是实体对象解决了问题。谢谢 –

相关问题