0

我正在使用 soring MVC 3.2.1。我正在使用一个应该返回 json 的控制器,我也包含了 jackson jars。但是没有返回 json。它给出错误此请求标识的资源只能生成具有特征的响应根据请求“接受”标头()不可接受。

@RequestMapping(value = "/search.json", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    protected @ResponseBody
    LoginDto searchDeals(@ModelAttribute Deal deal) {
        /*
         * DealDao dealdao = new DealDao(); List<Deal> deals =
         * dealdao.search(deal);
         */
        return new LoginDto("sdadas", "asdasdas");
    }

配置

<!--
    <bean name="/UploadEmployeeServlet.do"
    class="com.etnow.UploadEmployeeServlet" />
-->
<context:component-scan base-package="com.etnow.*" />
<mvc:annotation-driven
    content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager"
    class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false" />
    <property name="favorParameter" value="false" />
    <property name="ignoreAcceptHeader" value="false" />
    <property name="mediaTypes">
        <value>
            json=application/json
        </value><!--
    -->
    </property>
</bean>

<mvc:view-controller path="/one.do" view-name="SignUp" />
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

请帮助它在 3.0 中可以正常工作而无需设置 contentNogotiation Manager 但不能在最新版本的 spring MVC 中

4

1 回答 1

1

听起来您需要在发出 http 请求时在标头中发送“Accept= application/json”。

您还可以通过创建 ObjectMapper 对象并检查返回类型上的 canSerialize(class) 来检查您是否可以获得 json 以及您的 jar 是否已正确安装。

你如何发布数据?

删除 "produces = "application/json;charset=UTF-8" " 也可以解决问题,但如果您想包含该行,则需要在 http 请求中包含接受标头。

于 2013-03-30T13:39:29.423 回答