无法使用Spring 3.2 MVC Controller接收JSON请求

时间:2014-05-11 16:45:28

标签: json spring spring-mvc

我正在尝试让我的Controller接收JSON,但它失败了。我是Spring的新手,也是HTML浏览器开发的新手。看来我在下面的前几个方法中返回JSON OK,只是在最后一个方法中无法接收它。我完全失去了该做什么。这是我的设置。

以下是我的控制器代码的一部分:

@Controller
public class SDTM_Controller {
    private SDTM_Service service;

    @RequestMapping(value="/getVersions", method=RequestMethod.GET)
    public @ResponseBody List<String> getVersions(){
        return service.getVersions();
    }

    // URL: sdtm/getTemplateInfo?version=xxx
    @RequestMapping(value="/getTemplateInfo", params="version", method=RequestMethod.GET)
    public @ResponseBody List<DomainTemplateInfo> getTemplateInfo(@RequestParam String version){
        return service.getTemplates(version);
    }

    @RequestMapping(value="/createDomains", method=RequestMethod.POST, consumes="application/json")
    public @ResponseBody String createDomains(@RequestBody CreateDomainParams params){
// breakpoint set hit, but never reached.

    }
}

方法getVersions和getTemplateInfo工作正常,它们以JSON格式返回数据。但是,永远不会调用createDomains方法。

在WEB-INF目录中,我有一个名为sdtm-servlet.xml的文件。这是内容。无论有没有这个元素,我都试过这个。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation=
        "http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd"    
>
        <context:component-scan base-package="com.sas.hls.clc.clinicalstandards.sdtm" />
        <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
            </mvc:message-converters>
        </mvc:annotation-driven>
    </beans>

我的WEB-INF / web.xml文件包含以下条目:

<servlet>
    <servlet-name>sdtm</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/sdtm-servlet.xml</param-value>
    </init-param>
</servlet>

我使用Spring 3.2在Tomcat中运行它。我的应用程序目录的WEB-INF / lib目录包含jackson-core-asl-1.9.13.jar和jackson-mapper-asl.1.9.13.jar。

我错过了什么?

另外,另一位开发人员编写了一个小的HTML页面,用于向服务器提交请求。我们正在使用Chrome。他坚持认为JSON数据需要进行UURL编码,但是当我查看在Chrome中发送的请求信息时,请求正文不是JSON格式,它似乎被翻译成看起来像HTTP请求列表的格式参数。他应该做编码吗?浏览器或服务器端缺少调用我的控制器方法createDomain的方法。

1 个答案:

答案 0 :(得分:0)

问题似乎与此Issue相同,您是否可以验证问题中提到的一些解决方法。如果它没有解决分享您向控制器和日志提交数据的方式。