bboss mvc 对象自动转换为json响应请求浅析

简介: bbossgroups mvc 对象自动转换为json响应请求功能浅析 bbossgroups mvc 对象自动转换为json响应请求有两种使用方式 方式一 服务端指定响应datatype为json,将返回对象直接转换为json数据返回到客户端 方式二 客户端请求中的datatype为json,则将返回对象直接转换为json数据返回到客户端 如果要使用对象转json数据功能,必须在bboss-mvc.xml文件中的httpMessageConverters节点中配置以下jackson转换器: 下面分别讲述两种方法的使用方法。
bbossgroups mvc 对象自动转换为json响应请求功能浅析


bbossgroups mvc 对象自动转换为json响应请求有两种使用方式
方式一 服务端指定响应datatype为json,将返回对象直接转换为json数据返回到客户端
方式二 客户端请求中的datatype为json,则将返回对象直接转换为json数据返回到客户端

如果要使用对象转json数据功能,必须在bboss-mvc.xml文件中的httpMessageConverters节点中配置以下jackson转换器:
<property class="org.frameworkset.http.converter.json.MappingJacksonHttpMessageConverter"/>


下面分别讲述两种方法的使用方法。

方式一 服务端指定响应datatype为json,将返回对象直接转换为json数据返回到客户端
自bbossgroups 3.2版本以来,我们可以直接在服务端的控制方法的ResponseBody注解指定返回数据类型(目前支持两种方式:json和String),我们来看服务端控制器方法的编写方式:
public @ResponseBody(datatype = "json")
	AjaxResponseBean deleteRequester(
			@RequestParam(name = "service_requester_id") String service_requester_id,
			HttpServletResponse response) throws Exception {
		AjaxResponseBean ajaxResponseBean = new AjaxResponseBean();
		try {
			requesterService.deleteRequester(service_requester_id);
			ajaxResponseBean.setStatus("success");

		} catch (Exception e) {
						ajaxResponseBean.setStatus("error");
			if (e.getMessage() != null
					&& e.getMessage().indexOf("constraint") > 0) {
								ajaxResponseBean.setData("存在关联数据,不能删除!");
			} else {
				ajaxResponseBean.setE(e.getMessage());
			}
		}
		return ajaxResponseBean;
	}



我们再看一下客户端如果通过请求与该控制器方法相对应的url来得到相对应的json对象:
var service_requester_id = cks.eq(0).val();								
							$.post(
								'deleteRequester.page',
								{
									"service_requester_id" : service_requester_id
								},	
								function(responseText, textStatus) {	
									alert(responseText.data);					alert(responseText.status);												});


我们在看一下将被转换为json数据的java对象AjaxResponseBean :
package org.ffameworkset.mvc;

import java.io.Serializable;

public class AjaxResponseBean implements Serializable {
	//状态,success表示成功,error表示失败
	private String status;
	
	//信息
	private String data;
	
	private String e;
	
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getData() {
		return data;
	}
	public void setData(String data) {
		this.data = data;
	}
	public String getE() {
		return e;
	}
	public void setE(String e) {
		this.e = e;
	}
}



方式二 客户端请求中的datatype为json,则将返回对象直接转换为json数据返回到客户端
这种方式是由客服端提交请求时,指定数据类型dataType为json,先看客户端代码:
//缓存二级菜单
var moduleItems = new Array();
$.ajax({
			type : "post",
			dataType : "json",
			data : {
				"moduleId" : moduleId
			},
			url : "menu/queryMenu.page",
			cache : false,
			async : false,// ajax同步标志修改
			error : function() {
				window.parent.locaction="logout.jsp";				
			},
			success : function(data) {
				//将返回的数据放入js缓存
				moduleItems[moduleId] = data;				
			}
		});


遍历json list对象及访问对象属性:
//从js缓存中读取二级菜单信息
	var data = moduleItems[moduleId];
	if (data.length > 0) {
		$.each(data, function(i) {
			
			var span = $("<span style=\"cursor:pointer;\" class=\"func\" id=\""
					+ this.id
					+ "Node"
					+ "\" title=\""
					+ this.name
					+ "\" dataType='iframe' dataLink='"
					+ this.pathU
					+ "' iconImg='images/msn.gif'>"
					+ this.name
					+ "</span>").click(function() {		
											
						//如果二级菜单项被点击,则触发主体内容窗口的addTab函数				
						var name = $(this).attr('title');
						var dataLink = $(this).attr('dataLink');
						addTab(name, dataLink);
					});
				
					var currentdiv = $("<div style=\"width:100px;float:left;margin-left:5px;\"><div style=\"text-align:center;\"><img src=\""
							+ this.imageUrl
							+ "\" width=\"25\" height=\"25\" style=\"cursor:pointer;\" on></div><div style=\"margin-top:1px;text-align:center;color:#000;\" id=\""
							+ this.id + "\"></div></div>");
					currentdiv.find("img").click(function() {
						currentdiv.find("span").click();							
					});
					$(".bj").append(currentdiv);
					$("#" + this.id).append(span);
					
		});
	}	


url : "menu/queryMenu.page"指定了要请求的控制器方法,下面我们就看一下该控制器方法的实现代码:

public @ResponseBody
	List<MenuItemU> queryMenu(@RequestParam(name = "moduleId") String moduleId,
			HttpServletRequest request) {
				try {
			AccessControl control = AccessControl.getAccessControl();
			
			String modulePath = control.getCurrentSystemID()
					+ "::menu://sysmenu$root/" + moduleId + "$module";
			MenuHelper menuHelper = new MenuHelper(
					control.getCurrentSystemID(), control);
			ItemQueue itemQueue = menuHelper.getSubItems(modulePath);
						List<MenuItemU> list = new ArrayList<MenuItemU>();
			for (int i = 0; itemQueue != null && i < itemQueue.size(); i++) {
				Item item = itemQueue.getItem(i);
				if (!item.isUsed()) {
					continue;
				}
				String contextPath = request.getContextPath();
				String url = MenuHelper.getMainUrl(contextPath, item,
						(java.util.Map) null);
				MenuItemU menuItemU = new MenuItemU();
				menuItemU.setId(item.getId());
				menuItemU.setName(item.getName());
				menuItemU.setImageUrl(item.getMouseclickimg());
				menuItemU.setPathU(url);
				menuItemU.setType("item");
				list.add(menuItemU);
			}

				return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}


该方法通过@ResponseBody注解声明告诉mvc框架直接将类型为 List<MenuItemU>的返回值转换为json数据(因为客户端指定响应数据类型为json)响应到客户端。
MenuItemU对象的结构如下:
public class MenuItemU {
	private String id;
	private String name;
	private String imageUrl;
	private String pathU;
	private String type;
	
	private boolean hasSon;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getImageUrl() {
		return imageUrl;
	}
	public void setImageUrl(String imageUrl) {
		this.imageUrl = imageUrl;
	}
	public String getPathU() {
		return pathU;
	}
	public void setPathU(String pathU) {
		this.pathU = pathU;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public boolean getHasSon() {
		return hasSon;
	}
	public void setHasSon(boolean hasSon) {
		this.hasSon = hasSon;
	}
}


到此bboss mvc中的控制器对对象转换为json数据的自动处理功能就介绍完了,如有疑问还请留言讨论。

目录
相关文章
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
150 2
|
3月前
|
JSON 前端开发 Java
Spring MVC——获取参数和响应
本文介绍了如何在Spring框架中通过不同的注解和方法获取URL参数、上传文件、处理cookie和session、以及响应不同类型的数据。具体内容包括使用`@PathVariable`获取URL中的参数,使用`MultipartFile`上传文件,通过`HttpServletRequest`和`@CookieValue`获取cookie,通过`HttpSession`和`@SessionAttribute`获取session,以及如何返回静态页面、HTML代码片段、JSON数据,并设置HTTP状态码和响应头。
78 1
Spring MVC——获取参数和响应
|
3月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
51 1
Spring MVC——项目创建和建立请求连接
|
3月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
437 7
|
3月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
130 3
|
4月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
4月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
105 1
|
5月前
|
JSON API 数据格式
基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
【8月更文挑战第25天】这段资料介绍了一个使用Python从服务器获取实时天气数据并解析JSON格式数据的基本框架。主要分为三个部分:一是安装必要的`requests`库以发起HTTP请求获取数据,同时利用Python内置的`json`库处理JSON数据;二是提供了具体的代码实现,包括获取天气数据的`get_weather_data`函数和解析数据的`parse_weather_data`函数;三是对代码逻辑进行了详细说明,包括如何通过API获取数据以及如何解析这些数据来获取温度和天气描述等信息。用户需要根据实际使用的天气API调整代码中的API地址、参数和字段名称。
101 0
|
3月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
2月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释