JsonResult作用、PageData作用、subject、containsKey

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

使用例子:

  1. 调用 Map 的 get() 方法获取数据;
  2. 如果返回不为 null, 直接返回该数据;
  3. 如果返回为 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);
}

猜你喜欢

转载自blog.csdn.net/pdsuxueyuan/article/details/86545084