0 0

spring3mvc处理xml数据报415错误30

前几天写了一个spring3mvc处理xml、json数据的例子,json调试成功了,但xml数据处理总是报415错误,请各位看看什么原因,谢谢!

执行HelloWorldControllerTest后,调试信息如下,报415 (Unsupported Media Type)错误,感觉前端还是没有解析出xml数据:

 

2014-05-07 10:12:38 DEBUG [HttpAccessor.java:78] org.springframework.web.client.RestTemplate.createRequest() - Created POST request for "http://localhost:8090/spring/handle51.html"

2014-05-07 10:12:38 DEBUG [RestTemplate.java:579] org.springframework.web.client.RestTemplate.doWithRequest() - Setting request Accept header to [application/json, application/xml, application/*+json, text/xml, application/json, application/*+xml, application/*+json]

2014-05-07 10:12:38 DEBUG [RestTemplate.java:653] org.springframework.web.client.RestTemplate.doWithRequest() - Writing [com.jshbank.springmvc.model.TUser@796e1c] as "application/xml" using [org.springframework.http.converter.xml.MarshallingHttpMessageConverter@2c03ff]

2014-05-07 10:12:39  WARN [RestTemplate.java:529] org.springframework.web.client.RestTemplate.handleResponseError() - POST request for "http://localhost:8090/spring/handle51.html" resulted in 415 (Unsupported Media Type); invoking error handler

 

springmvc-servlet.xml 写道
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

<!-- 默认扫描的包路径 -->
<context:component-scan base-package="com.jshbank.springmvc" />
<!-- 添加注解驱动 -->
<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>
atom=application/atom+xml
html=text/html
json=application/json
xml=application/xml
*=*/*
</value>
</property>
</bean>
<!-- 定义一个DefaultAnnotationHandlerMapping处理器映射,启动Spring MVC的注解功能,完成请求和注解POJO的映射,类级别的处理器映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

<!-- 定义一个AnnotationMethodHandlerAdapter,完成请求和注解POJO的映射,方法级别的处理器映射-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"
p:messageConverters-ref="messageConverters"/>
<util:list id="messageConverters">
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<!-- 解析xml请求数据,将xml转换为java对象-->
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"
p:supportedMediaTypes="application/xml"
p:marshaller-ref="xmlMarshaller"
p:unmarshaller-ref="xmlMarshaller"/> 
</util:list>

<bean id="xmlMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="autodetectAnnotations" value="true"/>
<property name="streamDriver">
<bean class="com.thoughtworks.xstream.io.xml.StaxDriver"/>
</property>
<property name="annotatedClasses">
<list>
<value>com.jshbank.springmvc.model.TUser</value>
</list>
</property>
</bean>

<!-- 定义跳转的文件的前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/"
p:suffix=".jsp" />

</beans>

 

HelloWorldController.java 写道
@RequestMapping(value="/handle51",method=RequestMethod.POST,headers="Content-Type=application/xml")
public ResponseEntity<TUser> handler51(HttpEntity<TUser> requestEntity){
TUser user=requestEntity.getBody();
user.setId(1000);
return new ResponseEntity<TUser>(user,HttpStatus.OK);
}

 

测试类HelloWorldControllerTest.java 写道

package com.jshbank.springmvc.web;

import java.io.IOException;
import java.util.Collections;
import junit.framework.Assert;

import org.junit.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
import org.springframework.oxm.xstream.XStreamMarshaller;
import org.springframework.web.client.RestTemplate;

import com.jshbank.springmvc.model.TUser;
import com.thoughtworks.xstream.io.xml.StaxDriver;


public class HelloWorldControllerTest {

@Test
public void testhandle51() throws IOException{
RestTemplate restTemplate=buildRestTemplate();

TUser user=new TUser();
user.setName("li");
user.setPassword("123");
user.setAge(85);

HttpHeaders entityHeaders=new HttpHeaders();
entityHeaders.setContentType(MediaType.valueOf("application/xml"));
entityHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_XML));

HttpEntity<TUser> requestEntity=new HttpEntity<TUser>(user, entityHeaders);
ResponseEntity<TUser> responseEntity=restTemplate.exchange("http://localhost:8090/spring/handle51.html", HttpMethod.POST, requestEntity, TUser.class);


TUser responseUser=responseEntity.getBody();
Assert.assertEquals(1000, responseUser.getId().intValue());
Assert.assertEquals("li", responseUser.getName());
Assert.assertEquals("123", responseUser.getPassword());

}

private RestTemplate buildRestTemplate(){
RestTemplate restTemplate=new RestTemplate();
XStreamMarshaller xmlMarshaller=new XStreamMarshaller();
xmlMarshaller.setStreamDriver(new StaxDriver());
xmlMarshaller.setAnnotatedClasses(new Class[]{TUser.class});

MarshallingHttpMessageConverter xmlConverter=new MarshallingHttpMessageConverter();
xmlConverter.setMarshaller(xmlMarshaller);
xmlConverter.setUnmarshaller(xmlMarshaller);
restTemplate.getMessageConverters().add(xmlConverter);

MappingJacksonHttpMessageConverter jsonConverter=new MappingJacksonHttpMessageConverter();
restTemplate.getMessageConverters().add(jsonConverter);

return restTemplate;

}
}

 

 

 

2014年5月07日 10:17

1个答案 按时间排序 按投票排序

0 0

application/xml" ???? 一般都是text/xml吧?

2014年5月07日 14:54

相关推荐

    spring-mvc.xml

    spring-mvc.xml资源下载,本xml为springmvc最纯净版xml!

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    1. **spring-mvc.xml**: 这是Spring MVC框架的核心配置文件,用于设置DispatcherServlet的行为,管理控制器(Controller)、视图解析器(View Resolver)、数据绑定器(DataBinder)等组件。例如,它会定义bean,如...

    Spring3 MVC 深入研究

    Spring3 MVC提供了一种分离关注点的方式,让开发者可以独立地处理业务逻辑、数据访问和用户界面。它通过DispatcherServlet作为前端控制器,接收HTTP请求,并根据配置将请求分发到相应的处理器。此外,它还支持多种...

    spring3MVC 框架demo

    Spring3MVC是Spring框架的一个重要模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。这个框架使得开发者可以更轻松地处理HTTP请求、数据绑定、验证以及视图渲染等任务。在"spring3MVC框架demo"中,...

    Spring MVC入门 XML版本+注释版本

    这个入门教程将涵盖XML配置和注解配置两种方式,帮助初学者理解如何在Spring MVC中搭建基本的"Hello, World!"应用。 首先,我们从XML配置开始。在Spring MVC中,`DispatcherServlet`是入口点,它负责分发HTTP请求到...

    spring mvc生成xml或json

    在Spring MVC框架中,开发人员经常需要处理不同的数据交换格式,如XML和JSON,以便与客户端进行交互。这两种格式在Web应用中广泛用于传输数据,因为它们轻量级且易于解析。下面我们将深入探讨如何在Spring MVC中生成...

    SSM整合配置文件、spring-mvc.xml、spring-mybatis.xml、spring.xml、config.properties、log4j.p

    config.properties:数据库配置文件 log4j.properties:mybatis日志文件 spring-mvc.xml:spring-MVC配置文件 spring-mybatis.xml:mybatis的配置文件 spring.xml

    Spring+mvc+mybatis Mapper xml自动加载

    Spring MVC是Spring框架的一部分,它提供了模型-视图-控制器(MVC)架构模式的实现,用于处理Web应用的请求和响应。MyBatis则是一个轻量级的持久层框架,它将SQL语句与Java代码分离,通过XML或注解来配置和映射原生...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...

    Spring Web MVC入门教程

    数据验证也是Web开发中的一个重要环节,Spring Web MVC提供了声明式的数据验证支持,它内置了多种验证约束和注解,帮助开发者在数据处理前进行校验,并提供了灵活的错误消息处理机制。 在视图解析方面,Spring Web ...

    Spring3MVC和jQuery的集成

    配置Spring3 MVC通常涉及web.xml的设置、DispatcherServlet的配置以及Spring的上下文配置(如beans.xml)。 接下来,让我们转向jQuery。jQuery简化了JavaScript编程,提供了一套简洁的API来处理DOM操作,如元素选择...

    spring mvc入门示例

    3. **模型(Model)**:在Spring MVC中,模型通常是POJO(Plain Old Java Object),用于封装数据。 4. **视图(View)**:Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等。视图负责渲染模型中的数据...

    Spring3 MVC 基础学习手册

    Spring3 MVC 是一款基于Java的轻量级Web应用框架,它是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)结构。在本文中,我们将深入探讨Spring3 MVC的基础配置、注解使用以及核心概念。 一、...

    spring MVC配置详解

    ViewResolver 是 Spring MVC 框架中负责将模型数据渲染到视图中的组件。我们可以使用 InternalResourceViewResolver 或其他视图解析器来配置 ViewResolver。 七、总结 Spring MVC 是一个功能强大且灵活的 Web 框架...

    Spring3 MVC 实例

    在Spring MVC中,这些对象通常通过`@Service`和`@Repository`注解进行管理,前者封装了业务逻辑,后者处理数据访问。 3. **视图(View)**:视图负责展示数据。Spring MVC支持多种视图技术,如JSP、FreeMarker或...

    spring3.0 MVC中文教程

    3. **第3部分:在Spring 3.0 MVC中进行表单处理** - 探讨如何使用Spring MVC处理表单提交,包括数据绑定和验证。 4. **第4部分:Spring 3 MVC的Tiles支持与Eclipse中的插件教程** - Tiles框架是一种用于管理页面布局...

Global site tag (gtag.js) - Google Analytics