睿乐购电商课程设计——全局配置
配置类获取用户的登录信息全局异常处理数据封装工具类分页工具类
配置类
DefaultFastjsonConfig: fastjson数据处理配置:日期处理
package com
.ysu
.shop
.config
;
import com
.alibaba
.fastjson
.serializer
.SerializeConfig
;
import com
.alibaba
.fastjson
.serializer
.SerializerFeature
;
import com
.alibaba
.fastjson
.serializer
.ToStringSerializer
;
import com
.alibaba
.fastjson
.support
.config
.FastJsonConfig
;
import com
.alibaba
.fastjson
.support
.spring
.FastJsonHttpMessageConverter
;
import org
.springframework
.boot
.autoconfigure
.condition
.ConditionalOnClass
;
import org
.springframework
.boot
.autoconfigure
.condition
.ConditionalOnMissingBean
;
import org
.springframework
.boot
.autoconfigure
.condition
.ConditionalOnWebApplication
;
import org
.springframework
.context
.annotation
.Bean
;
import org
.springframework
.context
.annotation
.Configuration
;
import org
.springframework
.http
.MediaType
;
import java
.math
.BigInteger
;
import java
.nio
.charset
.Charset
;
import java
.util
.ArrayList
;
import java
.util
.List
;
@Configuration("defaultFastjsonConfig")
@ConditionalOnClass(com
.alibaba
.fastjson
.JSON
.class)
@ConditionalOnMissingBean(FastJsonHttpMessageConverter
.class)
@ConditionalOnWebApplication
public class DefaultFastjsonConfig {
@Bean
public FastJsonHttpMessageConverter
fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter converter
= new FastJsonHttpMessageConverter();
converter
.setFastJsonConfig(fastjsonConfig());
converter
.setSupportedMediaTypes(getSupportedMediaType());
return converter
;
}
public FastJsonConfig
fastjsonConfig() {
FastJsonConfig fastJsonConfig
= new FastJsonConfig();
fastJsonConfig
.setSerializerFeatures(
SerializerFeature
.DisableCircularReferenceDetect
,
SerializerFeature
.PrettyFormat
,
SerializerFeature
.WriteEnumUsingToString
);
fastJsonConfig
.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastJsonConfig
.setCharset(Charset
.forName("utf-8"));
SerializeConfig serializeConfig
= SerializeConfig
.globalInstance
;
serializeConfig
.put(BigInteger
.class, ToStringSerializer
.instance
);
serializeConfig
.put(Long
.class, ToStringSerializer
.instance
);
serializeConfig
.put(Long
.TYPE
, ToStringSerializer
.instance
);
fastJsonConfig
.setSerializeConfig(serializeConfig
);
return fastJsonConfig
;
}
public List
<MediaType> getSupportedMediaType() {
ArrayList
<MediaType> mediaTypes
= new ArrayList<>();
mediaTypes
.add(MediaType
.APPLICATION_JSON_UTF8
);
return mediaTypes
;
}
}
SwaggerConfig:swagger2文档配置
package com
.ysu
.shop
.config
;
import io
.swagger
.annotations
.ApiOperation
;
import org
.springframework
.context
.annotation
.Bean
;
import org
.springframework
.context
.annotation
.Configuration
;
import springfox
.documentation
.builders
.ApiInfoBuilder
;
import springfox
.documentation
.builders
.PathSelectors
;
import springfox
.documentation
.builders
.RequestHandlerSelectors
;
import springfox
.documentation
.service
.ApiInfo
;
import springfox
.documentation
.service
.ApiKey
;
import springfox
.documentation
.spi
.DocumentationType
;
import springfox
.documentation
.spring
.web
.plugins
.Docket
;
import springfox
.documentation
.swagger2
.annotations
.EnableSwagger2
;
import java
.util
.ArrayList
;
import java
.util
.List
;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket
createRestApi() {
return new Docket(DocumentationType
.SWAGGER_2
)
.select()
.apis(RequestHandlerSelectors
.withMethodAnnotation(ApiOperation
.class))
.paths(PathSelectors
.any())
.build()
.securitySchemes(security())
.apiInfo(apiInfo());
}
private ApiInfo
apiInfo() {
return new ApiInfoBuilder().title("睿乐购商城").description("接口文档").termsOfServiceUrl("http://www.localhost:8082").version("1.0.0").build();
}
private List
<ApiKey> security() {
ArrayList
<ApiKey> apiKeys
= new ArrayList<>();
apiKeys
.add(new ApiKey("token", "token", "header"));
return apiKeys
;
}
}
获取用户的登录信息
通过注解获取登录信息
package com
.ysu
.shop
.annotation
;
import java
.lang
.annotation
.*
;
@Target({ElementType
.PARAMETER
})
@Retention(RetentionPolicy
.RUNTIME
)
@Documented
public @
interface TokenToUser {
String
value() default "oldUser";
}
处理器
package com
.ysu
.shop
.handler
;
import com
.ysu
.shop
.annotation
.TokenToUser
;
import com
.ysu
.shop
.pojo
.User
;
import com
.ysu
.shop
.service
.UserService
;
import org
.springframework
.core
.MethodParameter
;
import org
.springframework
.stereotype
.Component
;
import org
.springframework
.web
.bind
.support
.WebDataBinderFactory
;
import org
.springframework
.web
.context
.request
.NativeWebRequest
;
import org
.springframework
.web
.method
.support
.HandlerMethodArgumentResolver
;
import org
.springframework
.web
.method
.support
.ModelAndViewContainer
;
import javax
.annotation
.Resource
;
import javax
.servlet
.http
.HttpServletRequest
;
import java
.io
.IOException
;
@Component
public class TokenToUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Resource
private UserService userService
;
public TokenToUserMethodArgumentResolver() {
}
public boolean supportsParameter(MethodParameter parameter
) {
if (parameter
.hasParameterAnnotation(TokenToUser
.class)) {
return true;
}
return false;
}
public Object
resolveArgument(MethodParameter parameter
, ModelAndViewContainer mavContainer
, NativeWebRequest webRequest
, WebDataBinderFactory binderFactory
) throws Exception
{
if (parameter
.getParameterAnnotation(TokenToUser
.class) instanceof TokenToUser) {
User oldUser
= null
;
String token
= webRequest
.getHeader("token");
if (null
!= token
&& !"".equals(token
) && token
.length() == 32) {
oldUser
= userService
.getUserByToken(token
);
}
return oldUser
;
}
return null
;
}
public static byte[] getRequestPostBytes(HttpServletRequest request
)
throws IOException
{
int contentLength
= request
.getContentLength();
if (contentLength
< 0) {
return null
;
}
byte buffer
[] = new byte[contentLength
];
for (int i
= 0; i
< contentLength
; ) {
int readlen
= request
.getInputStream().read(buffer
, i
,
contentLength
- i
);
if (readlen
== -1) {
break;
}
i
+= readlen
;
}
return buffer
;
}
}
配置
package com
.ysu
.shop
.config
;
import com
.ysu
.shop
.handler
.TokenToUserMethodArgumentResolver
;
import org
.springframework
.context
.annotation
.Configuration
;
import org
.springframework
.web
.method
.support
.HandlerMethodArgumentResolver
;
import org
.springframework
.web
.servlet
.config
.annotation
.WebMvcConfigurer
;
import javax
.annotation
.Resource
;
import java
.util
.List
;
@Configuration
public class SpringBootWebMvcConfigurer implements WebMvcConfigurer {
@Resource
private TokenToUserMethodArgumentResolver tokenUserMethodArgumentResolver
;
public void addArgumentResolvers(List
<HandlerMethodArgumentResolver> argumentResolvers
) {
argumentResolvers
.add(tokenUserMethodArgumentResolver
);
}
}
全局异常处理
自定义异常父类
package com
.ysu
.shop
.exception
;
public class MyException extends RuntimeException {
private static final long serialVersionUID
= 6445638039342655172L
;
private int code
;
private String msg
;
public MyException(int code
, String msg
) {
this.code
= code
;
this.msg
= msg
;
}
public int getCode() {
return code
;
}
public void setCode(int code
) {
this.code
= code
;
}
public String
getMsg() {
return msg
;
}
public void setMsg(String msg
) {
this.msg
= msg
;
}
}
用户未登录
package com
.ysu
.shop
.exception
;
public class UserNoLoginException extends MyException{
private static final long serialVersionUID
= 5276752412710843243L
;
private static final String MSG
= "用户未登录,无法操作";
private String msg
;
private static final int code
= 402;
public UserNoLoginException(){
super(code
,MSG
);
this.msg
= MSG
;
}
public UserNoLoginException(String msg
) {
super(code
,msg
);
this.msg
= msg
;
}
@Override
public String
getMsg() {
return msg
;
}
@Override
public void setMsg(String msg
) {
this.msg
= msg
;
}
@Override
public int getCode() {
return UserNoLoginException
.code
;
}
}
用户操作没有权限
package com
.ysu
.shop
.exception
;
public class NotAuthorityException extends MyException{
private static final long serialVersionUID
= 174218172435946873L
;
private static final String MSG
= "不是管理员,没有该权限操作";
private String msg
;
private static final int code
= 412;
public NotAuthorityException(){
super(code
,MSG
);
this.msg
= MSG
;
}
public NotAuthorityException(String msg
) {
super(code
, msg
);
this.msg
= msg
;
}
@Override
public String
getMsg() {
return msg
;
}
@Override
public void setMsg(String msg
) {
this.msg
= msg
;
}
@Override
public int getCode() {
return NotAuthorityException
.code
;
}
}
参数异常
package com
.ysu
.shop
.exception
;
public class ParamValidException extends MyException{
private static final long serialVersionUID
= 1L
;
private static final String MSG
= "参数异常!";
private String msg
;
private static final int code
= 406;
public ParamValidException(){
super(code
,MSG
);
this.msg
= MSG
;
}
public ParamValidException(String msg
) {
super(code
, msg
);
this.msg
= msg
;
}
@Override
public String
getMsg() {
return msg
;
}
@Override
public void setMsg(String msg
) {
this.msg
= msg
;
}
@Override
public int getCode() {
return ParamValidException
.code
;
}
}
异常处理器
package com
.ysu
.shop
.handler
;
import com
.ysu
.shop
.exception
.MyException
;
import com
.ysu
.shop
.util
.Result
;
import com
.ysu
.shop
.util
.ResultGenerator
;
import org
.slf4j
.Logger
;
import org
.slf4j
.LoggerFactory
;
import org
.springframework
.web
.bind
.annotation
.ExceptionHandler
;
import org
.springframework
.web
.bind
.annotation
.RestControllerAdvice
;
import javax
.servlet
.http
.HttpServletRequest
;
@RestControllerAdvice
@SuppressWarnings("all")
public class GlobalExceptionHandle {
private static Logger log
= LoggerFactory
.getLogger(MyException
.class);
private static final int NOT_FOUND
= 404;
@ExceptionHandler(value
= Exception
.class)
public Result
handleException(Exception e
, HttpServletRequest request
) {
if (e
instanceof MyException) {
log
.error("msg:{}, url:{}", ((MyException
) e
).getMsg(), request
.getRequestURL());
return ResultGenerator
.getErrorResult(((MyException
) e
).getCode(), ((MyException
) e
).getMsg());
}
e
.printStackTrace();
log
.error("msg:{}, url:{}", e
.getMessage(), request
.getRequestURL());
return ResultGenerator
.getErrorResult(NOT_FOUND
, e
.getMessage());
}
}
数据封装工具类
Result
package com
.ysu
.shop
.util
;
import java
.io
.Serializable
;
public class Result<T> implements Serializable {
private static final long serialVersionUID
= 1L
;
private int status
;
private String msg
;
private T data
;
public Result() {
}
public int getStatus() {
return status
;
}
public void setStatus(int status
) {
this.status
= status
;
}
public String
getMsg() {
return msg
;
}
public void setMsg(String msg
) {
this.msg
= msg
;
}
public T
getData() {
return data
;
}
public void setData(T data
) {
this.data
= data
;
}
@Override
public String
toString() {
return "Result{" +
"status=" + status
+
", msg='" + msg
+ '\'' +
", data=" + data
+
'}';
}
}
ResultGenerator
package com
.ysu
.shop
.util
;
import org
.springframework
.util
.StringUtils
;
@SuppressWarnings("all")
public class ResultGenerator {
private static final String DEFAULT_SUCCESS_MESSAGE
= "SUCCESS";
private static final String DEFAULT_FAIL_MESSAGE
= "FAIL";
public static Result
getSuccessResult() {
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_SUCCESS
);
result
.setMsg(DEFAULT_SUCCESS_MESSAGE
);
return result
;
}
public static Result
getSuccessResult(String message
) {
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_SUCCESS
);
result
.setMsg(message
);
return result
;
}
public static Result
getSuccessResult(Object data
) {
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_SUCCESS
);
result
.setMsg(DEFAULT_SUCCESS_MESSAGE
);
result
.setData(data
);
return result
;
}
public static Result
getFailResult(String message
) {
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_SERVER_ERROR
);
if (StringUtils
.isEmpty(message
)) {
result
.setMsg(DEFAULT_FAIL_MESSAGE
);
} else {
result
.setMsg(message
);
}
return result
;
}
public static Result
getNullResult(String message
) {
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_BAD_REQUEST
);
result
.setMsg(message
);
return result
;
}
public static Result
getErrorResult(int code
, String message
) {
Result result
= new Result();
result
.setStatus(code
);
result
.setMsg(message
);
return result
;
}
public static Result
getErrorResult(String msg
){
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_ERROR
);
result
.setMsg(msg
);
return result
;
}
public static Result
getErrorByParams(String msg
){
Result result
= new Result();
result
.setStatus(Constants
.RESULT_CODE_PARAM_ERROR
);
result
.setMsg(msg
);
return result
;
}
}
分页工具类
PageResult
package com
.ysu
.shop
.util
;
import java
.io
.Serializable
;
import java
.util
.List
;
public class PageResult implements Serializable {
private static final long serialVersionUID
= -619801323991675434L
;
private int totalCount
;
private int pageSize
;
private int totalPage
;
private int currPage
;
private List
<?> list
;
public PageResult(List
<?> list
, int totalCount
, int pageSize
, int currPage
) {
this.list
= list
;
this.totalCount
= totalCount
;
this.pageSize
= pageSize
;
this.currPage
= currPage
;
this.totalPage
= (int) Math
.ceil((double) totalCount
/ pageSize
);
}
public int getTotalCount() {
return totalCount
;
}
public void setTotalCount(int totalCount
) {
this.totalCount
= totalCount
;
}
public int getPageSize() {
return pageSize
;
}
public void setPageSize(int pageSize
) {
this.pageSize
= pageSize
;
}
public int getTotalPage() {
return totalPage
;
}
public void setTotalPage(int totalPage
) {
this.totalPage
= totalPage
;
}
public int getCurrPage() {
return currPage
;
}
public void setCurrPage(int currPage
) {
this.currPage
= currPage
;
}
public List
<?> getList() {
return list
;
}
public void setList(List
<?> list
) {
this.list
= list
;
}
@Override
public String
toString() {
return "PageResult{" +
"totalCount=" + totalCount
+
", pageSize=" + pageSize
+
", totalPage=" + totalPage
+
", currPage=" + currPage
+
", list=" + list
+
'}';
}
}
PageUtil
package com
.ysu
.shop
.util
;
import java
.util
.LinkedHashMap
;
import java
.util
.Map
;
public class PageUtil extends LinkedHashMap<String, Object> {
private static final long serialVersionUID
= 6266971646743089177L
;
private int page
;
private int limit
;
public PageUtil(Map
<String, Object> params
) {
this.putAll(params
);
this.page
= Integer
.parseInt(params
.get("page").toString());
this.limit
= Integer
.parseInt(params
.get("limit").toString());
this.put("start", (page
- 1) * limit
);
this.put("page", page
);
this.put("limit", limit
);
}
public int getPage() {
return page
;
}
public void setPage(int page
) {
this.page
= page
;
}
public int getLimit() {
return limit
;
}
public void setLimit(int limit
) {
this.limit
= limit
;
}
@Override
public String
toString() {
return "PageUtil{" +
"page=" + page
+
", limit=" + limit
+
'}';
}
}