Java中JsonResult作用
JsonResult内部其实是使用JavaScriptSerializer来序列化结果集的,就是说我们把结果集放进去,就会直接返回给客户端json对象,不用我们手动实现序列化接口再处理了。
PageDate
PageData类,它继承了HashMap,外加实现了Map,用来自动将前台传递过来的数组参数自动装换成Map对象(PageData的对象),这样做的 好处是每次不用手动去解析前台传递的数据了,直接用this.PageData.getString(“属性名”)即可获取到值,很方便
1.首先写个BaseControl类,里面需要有获取当前请求的HttpServletRequest对象方法,跟PageData类方法
package com.beijia.controller.base;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;
import com.beijia.common.utils.webpage.PageData;
public class BaseController<T> {
/**
* 得到PageData
*/
public PageData getPageData(){
return new PageData(this.getRequest());
}
/**
* 得到当前请求的request对象
*/
public HttpServletRequest getRequest() {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
return request;
}
}
每次在在写control的时候直接
PageData pd = this.getPageData();
String ref=pd.getString("ref");
//便可获取到传过来的参数值
2.重头戏在这里PageData类的编写
public class PageData extends HashMap implements Map{
Map map = null;
HttpServletRequest request;
@SuppressWarnings({ "unchecked" })
public PageData(HttpServletRequest request){
this.request = request;
Map properties = request.getParameterMap();
Map returnMap = new HashMap();
Iterator entries = properties.entrySet().iterator();
Map.Entry entry;
String name = "";
String value = "";
while (entries.hasNext()) {
entry = (Map.Entry) entries.next();
name = (String) entry.getKey();
Object valueObj = entry.getValue();
if(null == valueObj){
value = "";
//此处需要注意的是前台传过来的是String数组对象就用String[]来判断,如果传递过来是json对象可以用JSONObject来尝试(这种方法没试过,应该是可以的),
//也可以传递在前台拼接个字符串后,后台直接用String来判断,然后用split方法来截断(这种当然可以,没试过,也不太方便)
}else if(valueObj instanceof String[]){
String[] values = (String[])valueObj;
for(int i=0;i<values.length;i++){
value = values[i] + ",";
}
value = value.substring(0, value.length()-1);
}else{
value = valueObj.toString();
}
returnMap.put(name, value);
}
map = returnMap;
}
}
获取PageData: PageData pd=this.getPageData();
新建PageData:PageData pd2=new PageData();
Apache Shiro Subject
Shiro的subject实质上是当前执行用户的特定视图。
通过org.apache.shiro.SecurityUtils可以查询当前执行用户:
Subject currentUser = SecurityUtils.getSubject();
获取当前执行用户的session:
(在非web、非EJB的情况下,Shiro自动使用自带session;如果是web或者EJB应用,则Shiro自动使用HttpSession,不需要人为改变。)
Session session = currentUser.getSession();
session.setAttribute( “someKey”, “aValue” );
containsKey
使用例子:
- 调用 Map 的 get() 方法获取数据;
- 如果返回不为 null, 直接返回该数据;
- 如果返回为 null, 则生成数据, 或者从其他地方获取数据, 然后存放入 Map 中, 最后返回该数据.
这里, 我们可以通过使用 Map 的containsKey() 方法来检测数据(value)是否存在, 如果key存在, 则表明已经获取过一次数据, 那么直接返回该 key 在 Map 中的值. 不管是否为 null 都直接返回; 如果 key 不存在, 则去生成或者获取数据, 并放入到 Map 中, 并返回该数据.
这里使用 containsKey() 来检测可以应用于: 1. 从其他地方获取的数据可能为空, 并且不会有变化; 2. 获取数据比较耗时. 这个场景下, 使用该方法可以大大降低消耗, 特别是在同步情况下。
package com.okdi.controller;
import java.util.HashMap;
import java.util.Map;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Map map=new HashMap();
map.put("a","aaa");
System.out.println(map.containsKey("a")); //输出true 如果这个map集合中有这个key就返回true
System.out.println(map.containsKey("b")); //输出false 没有就返回false
}
}
//解析session里的SPID的值
if(!pd.containsKey("SPID") || StringUtils.isEmpty(pd.getString("SPID"))){
code = MessageUtil.CODE_01;
msg = MessageUtil.MSG_SPID;//不能为空
}else if(!pd.containsKey("ID") || StringUtils.isEmpty(pd.getString("ID"))){
code = MessageUtil.CODE_01;
msg = MessageUtil.MSG_ID;
}else {
licenseService.saveMain(pd,user);
}