一个简单的util类,也要追求写的“美”
项目中引入了eu.bitwalker.UserAgentUtils包,用于获取登录客户端的访问设备类型,比如用户用手机iphone12登录的,则获取的访问设备类型为iphone12
点击查看代码
eu.bitwalker
UserAgentUtils
1.21
package com.leadmap.common.utils;
import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;
import javax.servlet.http.HttpServletRequest;
/**
* Company: xxx
*
* @description: 返回请求上下文的浏览器及操作系统信息
* @author: sjbm
* @date: 2021/10/20 10:14
*/
public class OSUtils {
/**
* 返回操作系统信息
* @param request 请求上下文
* @return OperatingSystem
*/
public static OperatingSystem getOperatingSystem(HttpServletRequest request) {
return parseAgent(request).getOperatingSystem();
}
/**
* 返回浏览器信息
* @param request 请求上下文
* @return Browser
*/
public static Browser getBrowser(HttpServletRequest request) {
return parseAgent(request).getBrowser();
}
private static UserAgent parseAgent(HttpServletRequest request ) {
String agent=request.getHeader("User-Agent");
//解析agent字符串
return UserAgent.parseUserAgentString(agent);
}
}
怎么“美”
这个Utils类做的事为从HttpServletRequest中取得浏览器对象与操作系统对象信息并返回
函数只做一件事,函数通过从HttpServletRequest获取信息解析并返回
命名,类名不符合驼峰命名法,函数的命名直接表达调用的意图
给类与函数加上必要的描述性注释
格式化代码,让类中代码对称工整,布局简明
整洁代码需要不停的去重构,去尝试,你目前所能认知的最优代码,过段时间你再看可能会有新的重构的思路。
点击查看代码
package com.leadmap.common.utils;
import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.Manufacturer;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
/**
* Company: XXXX
*
* @description: 返回请求上下文的浏览器及操作系统信息
* @author: sjbm
* @date: 2021/10/20 10:14
*/
public class UserAgentUtils {
/**
* 返回浏览器名称
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserName(HttpServletRequest request) {
Browser browser = getBrowser(request);
return browser.getName();
}
/**
* 返回浏览器类型
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserType(HttpServletRequest request) {
Browser browser = getBrowser(request);
if (browser.getBrowserType() != null) {
return browser.getBrowserType().getName();
}
return "";
}
/**
* 返回浏览器家族
*
* @param request 请求上下文
* @return String
*/
public static Browser getBrowserGroup(HttpServletRequest request) {
Browser browser = getBrowser(request);
return browser.getGroup();
}
/**
* 返回浏览器生产厂商id
*
* @param request 请求上下文
* @return String
*/
public static short getBrowserManufacturerId(HttpServletRequest request) {
Browser browser = getBrowser(request);
if (browser.getManufacturer() != null) {
return browser.getManufacturer().getId();
}
return 0;
}
/**
* 返回浏览器生产厂商名称
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserManufacturerName(HttpServletRequest request) {
Browser browser = getBrowser(request);
if (browser.getManufacturer() != null) {
return browser.getManufacturer().getName();
}
return "";
}
/**
* 返回浏览器使用的渲染引擎名称
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserRenderingEngine(HttpServletRequest request) {
Browser browser = getBrowser(request);
if (browser.getRenderingEngine() != null) {
return browser.getRenderingEngine().getName();
}
return "";
}
/**
* 返回浏览器版本
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserVersion(HttpServletRequest request) {
UserAgent userAgent = parseAgent(request);
if (userAgent.getBrowserVersion() != null) {
return userAgent.getBrowserVersion().getVersion();
}
return "";
}
/**
* 返回浏览器的主要版本
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserMajorVersion(HttpServletRequest request) {
UserAgent userAgent = parseAgent(request);
if (userAgent.getBrowserVersion() != null) {
return userAgent.getBrowserVersion().getMajorVersion();
}
return "";
}
/**
* 返回浏览器的次要版本
*
* @param request 请求上下文
* @return String
*/
public static String getBrowserMinorVersion(HttpServletRequest request) {
UserAgent userAgent = parseAgent(request);
if (userAgent.getBrowserVersion() != null) {
return userAgent.getBrowserVersion().getMinorVersion();
}
return "";
}
/**
* 返回操作系统名称
*
* @param request 请求上下文
* @return String
*/
public static String getOSName(HttpServletRequest request) {
OperatingSystem operatingSystem = getOperatingSystem(request);
return operatingSystem.getName();
}
/**
* 返回访问的设备类型
*
* @param request 请求上下文
* @return String
*/
public static String getDeviceType(HttpServletRequest request) {
OperatingSystem operatingSystem = getOperatingSystem(request);
if (operatingSystem.getDeviceType() != null) {
return operatingSystem.getDeviceType().getName();
}
return "";
}
/**
* 返回操作系统家族
*
* @param request 请求上下文
* @return String
*/
public static OperatingSystem getGroup(HttpServletRequest request) {
OperatingSystem operatingSystem = getOperatingSystem(request);
return operatingSystem.getGroup();
}
/**
* 返回操作系统生产厂商id
*
* @param request 请求上下文
* @return String
*/
public static short getManufacturerId(HttpServletRequest request) {
OperatingSystem operatingSystem = getOperatingSystem(request);
if (operatingSystem.getDeviceType() != null) {
return operatingSystem.getManufacturer().getId();
}
return 0;
}
/**
* 返回操作系统生产厂商名称
*
* @param request 请求上下文
* @return String
*/
public static String getManufacturerName(HttpServletRequest request) {
OperatingSystem operatingSystem = getOperatingSystem(request);
if (operatingSystem.getDeviceType() != null) {
return operatingSystem.getManufacturer().getName();
}
return "";
}
/**
* 返回操作系统信息
*
* @param request 请求上下文
* @return OperatingSystem
*/
public static OperatingSystem getOperatingSystem(HttpServletRequest request) {
return parseAgent(request).getOperatingSystem();
}
/**
* 返回浏览器信息
*
* @param request 请求上下文
* @return Browser
*/
public static Browser getBrowser(HttpServletRequest request) {
return parseAgent(request).getBrowser();
}
private static UserAgent parseAgent(HttpServletRequest request) {
String agent = request.getHeader("User-Agent");
//解析agent字符串
return UserAgent.parseUserAgentString(agent);
}
}