SpringMVC使用jaxb2实现bean与xml的互相转换出错!

发布于 2021-11-25 07:53:33 字数 4109 浏览 725 评论 4

当返回的是一个User对象时,前台可以正常显示xml

但当返回一个List<User>时,就出现一下错误:

HTTP Status 500 - Unable to locate object to be marshalled in model: {userList=[User [user_id=1, account=null, password=pwd0, name=jack_0], User [user_id=2, account=null, password=pwd1, name=jack_1], User [user_id=3, account=null, password=pwd2, name=jack_2]}

其中,springmvc-servlet.xml对应的配置是:

<!-- 视图解析器(ViewResolver) -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" >
	<property name="order" value="1" />
	
    <!-- 设置为true以忽略对Accept Header的支持--> 
    <property name="ignoreAcceptHeader" value="true"/>
    
    <!-- 用于关闭 /userinfo/123.json 的支持 默认是true -->
    <property name="favorPathExtension" value="true"/>  
    
    <!-- 用于开启 /userinfo/123?format=json 的支持 -->  
    <property name="favorParameter" value="false"/>  
    
    <property name="parameterName" value="format"/>
    
    <!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
    <property name="defaultContentType" value="text/html"/>
    
    <!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
    <property name="mediaTypes">
        <map>
            <entry key="html" value="text/html" />
            <entry key="json" value="application/json" />
            <entry key="xml" value="application/xml" />
        </map>
    </property>

    <property name="viewResolvers">
        <list>
        	<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
        	
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
                <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
				<!-- 前缀+viewname+后缀     就是访问路径 -->
				<!-- 前缀(从WebRoot目录向下) -->
				<property name="prefix" value="/WEB-INF/views/"></property>
				<!-- 后缀 ,可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑  -->
				<property name="suffix" value=".jsp"></property>
            </bean>
			<!-- 可加入其他视图技术如 volacity jstl等 -->
          </list>
      </property>

	<!-- view 接口 下的视图解析对象 -->  
    <property name="defaultViews">
        <list>
            <!-- 输出为JSON数据-->
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" ></bean>
           
            <!-- 输出为xml数据-->
            <bean name="jaxb2MarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
			<constructor-arg>
				<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
					<property name="classesToBeBound">
						<list>  
							<value>com.session.vo.User</value>
						</list>
					</property>
				</bean>
			</constructor-arg>
		</bean>
        </list>
    </property>
</bean>



对应的Controller是:

@RequestMapping("/xml3")
    public ModelAndView xml3(Model model) {  
        System.out.println("Jaxb2-XML-json");
        ModelAndView mav = new ModelAndView("xml");
	    List<User> list = new ArrayList<User>();

	    for (int i = 0; i < 5; i++) {
	    	User user = new User();
	    	user.setUser_id(1 + i);
			user.setPassword("pwd" + i);
			user.setName("jack_" + i);
			list.add(user);
		}
	    mav.addObject("userList", list);

	    return mav;
    }



User对象:
@XmlRootElement(name = "user")
public class User{

	private int user_id;
	private String password;
	private String name;

	@XmlElement
	public int getUser_id() {
		return user_id;
	}
	public void setUser_id(int user_id) {
		this.user_id = user_id;
	}
....略....
}



求大神指出问题所在,感激不尽!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

为你鎻心 2021-11-29 08:23:20

非常感谢你的回答,我已经顺利解决问题啦 二楼比你回答的快一点,所以就采纳他了 还是非常的感谢哦

风苍溪 2021-11-29 07:41:25

非常感谢,已经顺利解决问题

背叛残局 2021-11-29 07:03:57

不能直接在User上用jaxb,因为你添加到ModelAndView里面的其实是个List。 你要把你那些user封装成自己的UserList。之后再用jaxb.

http://stackoverflow.com/questions/15273393/javax-servlet-servletexception-unable-to-locate-object-to-be-marshalled-in-mode

陌上芳菲 2021-11-28 03:55:06

求大神帮忙
感激不尽

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文