Angularjs 杰克逊&x2B;修改消息转换器后,SpringWeb无法反序列化未加引号的字符串

Angularjs 杰克逊&x2B;修改消息转换器后,SpringWeb无法反序列化未加引号的字符串,angularjs,spring,spring-mvc,jackson,jackson-modules,Angularjs,Spring,Spring Mvc,Jackson,Jackson Modules,我有一个spring控制器方法,它将字符串作为请求体的整体,如下所示: @RequestMapping(method=RequestMethod.POST) public@ResponseBody DTO方法(@PathVariable(“userId”)长userId,@RequestBody字符串页){ //控制器内容在这里 } 以前,我已经能够将“裸”字符串发布到这个方法中,即以字符串作为主体(而不是json对象)的请求。例如(来自chrome开发工具): 在我尝试使用xml配置文件中

我有一个spring控制器方法,它将
字符串
作为
请求体的整体
,如下所示:

@RequestMapping(method=RequestMethod.POST)
public@ResponseBody DTO方法(@PathVariable(“userId”)长userId,@RequestBody字符串页){
//控制器内容在这里
}
以前,我已经能够将“裸”字符串发布到这个方法中,即以字符串作为主体(而不是json对象)的请求。例如(来自chrome开发工具):

在我尝试使用xml配置文件中的以下内容将添加到(以处理hibernate惰性集合)后,此选项停止工作:

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="modulesToInstall"
                              value="com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module"/>
                    <property name="featuresToEnable">
                        <array>
                            <util:constant static-field="com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES"/>
                        </array>
                    </property>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
为此(使用angular js)需要做的一项工作是在发布到API之前调用
JSON.stringify()
,这样angular代码就变得

$http.post(Url + userId, JSON.stringify(string)).then(function (result) {
        return result.data;
    });
请求变成

在此之后,API会像以前一样工作,自己接受字符串


虽然我知道一个字符串没有包含
不是有效的JSON字符串,我不明白的是,为什么在这种情况下更改ObjectMapperbean会产生如此大的差异?我正在使用spring版本4.3.4和jackson版本2.8.5,如果这是有用的信息的话。

在引入自定义
映射Jackson2HttpMessageConverter之前,dispatcher servlet配置和依赖项配置是什么样子的

既然Spring使用请求的
内容类型
头来确定要使用哪个消息转换器,那么当请求主体显然不是json时,为什么要显式发送
application/json


一个合适的“解决方法”是发送
内容类型:text/plain
,这将使Spring使用
StringHttpMessageConverter
,这也是我认为Spring在开始配置
MappingJackson2HttpMessageConverter

Dispatcher servlet之前所做的。我的应用程序上下文中没有与jackson相关的内容:我认为它只是使用spring默认值。我发现即使添加
标记也足以触发这种行为。我将研究如何使用
内容类型:text/plain
,但我很惊讶尝试定制消息转换器会产生这种效果。唉,代码已经在很多地方建立了,所以改变它会有点痛苦,但总体来说是正确的。
$http.post(Url + userId, JSON.stringify(string)).then(function (result) {
        return result.data;
    });