频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
Spring MVC之返回JSON或XML等多种视图
2017-03-23 10:01:00           
收藏   我要投稿

Spring MVC之返回JSON或XML等多种视图:很显然,根据MVC的思想,以及Spirng MVC的架构设计,我们很容易就能想到,只需要修改对应的ViewResolver,让其不选择jsp或者html以及别的模版,而是选择渲染成JSON,XML就可以了。

Spring MVC中ContentNegotiatingViewResolver这么一个Resolver提供了这么一种实现方法。

ContentNegotiatingViewResolver有什么作用呢?

1.支持在Spring MVC下输出不同的格式

2.该类不是自己处理view, 而是代理给不同的ViewResolver来处理不同的view;

我们要实现怎么样的效果呢?

1.访问url的json会返回json对象。

例如:localhost:8080/user/123.json会返回以123为唯一标识的user的json对象。

2.访问url的xml会返回xml对象。

例如:localhost:8080/user/123.xml会返回以123为唯一标识的user的xml对象。

3.直接访问url会访问url对应的页面。

例如:localhost:8080/user/123会访问原本的页面。

那我们需要怎么进行配置呢?

我们首先要修改viewResovler。

配置如下:


  
  
  
    
      
        
          
              
              
              
            
          
        
      
    
  


  
    
      
      

      
      
        
          
            
              
                springmvc.web.model
              
            
          
        
      
    
  
可是仔细一看,发现这个resolver只有json和xml的映射,那我们的jsp页面的映射怎么办呢?

就需要增加另外一个resolver了,不过优先级比它低。



  
  
  
  
还是原本熟悉的viewResolver。

对于JSON和XML两种视图的resolver,需要什么依赖呢?

JSON:


	com.fasterxml.jackson.core
	jackson-databind
	2.5.4
XML:

	org.springframework
	spring-oxm
	${spring.version}
因为spring-oxm中的依赖会和spring web mvc的依赖冲突,所以最好使用同一个spring版本。

这样我们的配置就基本完成了。最后的配置如下:

web.xml:


	Archetype Created Web Application

	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
	
		encodingFilter
		/*
	

	
	
		webDispatcherServlet
		org.springframework.web.servlet.DispatcherServlet
		
		
		1
	
	
	
		webDispatcherServlet
		/
	



webDIspatcherServlet-servlet.xml:




	

	
	
	
	
	
这里import无疑就是上面提到的resolver的配置了。

接下来就是业务逻辑部分:

我们需要一个用来传递的类:

@XmlRootElement
public class User {
	
	private String id;
	private String userName;
	private String password;
	
	public User() {
		id = "000";
		userName = "张三";
		password = "张三的password";
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}
注意这里需要用@XmlRootElement进行标注,只有这样才能被转换成XML对象。

Controller部分:

@Controller
@RequestMapping("/hello")
public class HelloWorldController {
	
	@RequestMapping(value = "/user/{id}", method=RequestMethod.GET)
	public String getUserPage(@PathVariable("id") String id, Model model) {
		User user = new User();
		user.setId(id);
		model.addAttribute(user);
		return "user";
	}

}
最后运行结果如下:

网上看了很多篇博客,很多都是在Spring 3.1之前支持的,而Spring3.2之后的版本对于其中很多属性的set方法都弃用了,还是spring官网论坛好T T

这样一来,返回什么视图都非常的方便了。

点击复制链接 与好友分享!回本站首页
上一篇:限流算法三种思路
下一篇:TensorFlow实现AlexNet
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站