【问题标题】:ExtJS4 and Spring MVC3 Post errorExtJS4 和 Spring MVC3 发布错误
【发布时间】:2012-02-13 04:54:15
【问题描述】:

我收到以下错误...

POST http://localhost:8080/mytest/admin/user/delete?_dc=1329102157683 415(不支持的媒体类型)

EXTJS 4 Grid 尝试同步()时出现此错误。

    api: {
        read:'admin/user/list',
        create:'admin/user/add',
        update:'admin/user/update',
        destroy:'admin/user/delete'
    },
    reader: {
        type: 'json',
        root: 'users',
        totalProperty: 'totalRecords',
        successProperty: 'success'
    },
    writer: {
        type: 'json',
        writeAllFields: true,
        encode: false//,
        //root: 'user'
    },

..... ......

    this.getUsersStore().remove(this.selectedUser);
    this.getUsersStore().sync();

弹簧控制器..,

        @Controller
        @Scope("request")
        public class UserFormController { 
            private static final long serialVersionUID = 5152065663578866866L;
            private static final Logger log = Logger.getLogger(UserFormController.class);

            @RequestMapping(method = RequestMethod.POST, value = "/admin/user/delete", headers = "Accept=application/json")
            @PreAuthorize("hasAuthority('ROLE_ADMIN')")
            public @ResponseBody
            Map<String, ? extends Object> delete(@RequestBody
            User user) {
                if (log.isTraceEnabled()) {
                    log.trace("Entering method 'delete'");
                }
                Map<String, Object> modelMap = new HashMap<String, Object>();
                List<Object> args = new ArrayList<Object>();
                modelMap.put("success", true);
                return modelMap;
            }

弹簧配置....

            <!-- JSON Converters -->
            <bean id="jsonHttpMessageConverter"
                class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            </bean>

            <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
                <property name="messageConverters">
                    <list>
                        <ref bean="jsonHttpMessageConverter" />
                    </list>
                </property>
            </bean>

            <!-- uses the Jackson library's ObjectMapper to render the response content 
                as JSON -->
            <bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />

            <bean id="mappingJacksonJsonView"
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <property name="objectMapper" ref="jacksonObjectMapper"/>
            </bean>

            <!-- Content Delegate -->
            <bean
                class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
                <property name="mediaTypes">
                    <map>
                        <entry key="html" value="text/html" />
                        <entry key="json" value="application/json" />
                    </map>
                </property>
                <property name="viewResolvers">
                    <list>
                        <ref bean="viewResolver" />
                    </list>
                </property>
                <property name="defaultViews">
                    <list>
                        <ref bean="mappingJacksonJsonView" />
                    </list>
                </property>
                <property name="favorPathExtension" value="false" />
                <property name="favorParameter" value="true" />
                <property name="useNotAcceptableStatusCode" value="true" />     
            </bean>

告诉我,

谢谢,

【问题讨论】:

  • 我试过了,headers = "Content-Type=application/json",但目前没有成功... :('
  • 您是否尝试过删除该标头配置?
  • 是的,最初我使用的是来自@RequestMapping 的值和方法。我根据论坛讨论添加了该选项。还有其他想法吗?

标签: ajax spring spring-mvc extjs


【解决方案1】:

在调试路径中的每个类之后......发现杰克逊只是在“跳舞”而没有抛出任何异常! pojo“用户”的属性之一失败。它根本无法反序列化包含对象的 java.util.Map。奇怪的是它可以毫无问题地序列化所有东西!

【讨论】:

    【解决方案2】:

    Jackson 确实能够反序列化 List 的对象,它只需要知道它们的类型。
    我认为你的情况应该是@RequestBody List&lt;User&gt; users
    据我所知,REST 代理总是尝试批量操作(这是原因
    你总是会得到一个对象列表)。

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多