// Path: summer-core/src/main/java/org/smartx/summer/bean/State.java
// public class State implements Serializable {
// 
//     private Integer code;
// 
// 
//     private String msg;
// 
//     public State() {
//     }
// 
// 
//     public State(Integer code, String msg) {
//         this.code = code;
//         this.msg = msg;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public void setCode(Integer code) {
//         this.code = code;
//     }
// 
//     public String getMsg() {
//         return msg;
//     }
// 
//     public void setMsg(String msg) {
//         this.msg = msg;
//     }
// 
//     public static State buildFromBindingResult(BindingResult bindingResult) {
//         StringBuilder stringBuilder = new StringBuilder();
//         bindingResult.getAllErrors().forEach(b -> {
//             stringBuilder.append(b.getDefaultMessage()).append("\n");
//         });
//         return new State(HttpStatus.BAD_REQUEST.value() * 10, stringBuilder.toString());
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/exception/AuthenticationException.java
// public class AuthenticationException extends RuntimeException {
//     private static final long serialVersionUID = -8799659324455306881L;
// 
//     public AuthenticationException(String message) {
//         super(message);
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/exception/BaseServiceException.java
// public class BaseServiceException extends Exception {
//     private Integer errorCode;
// 
//     private String message;
// 
//     public BaseServiceException(Integer errorCode, String message) {
//         this.errorCode = errorCode;
//         this.message = message;
//     }
// 
//     public BaseServiceException() {
//         super();
//     }
// 
//     public BaseServiceException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public BaseServiceException(State state) {
//         super();
//         this.errorCode = state.getCode();
//         this.message = state.getMsg();
//     }
// 
//     public Integer getErrorCode() {
//         return errorCode;
//     }
// 
//     public void setErrorCode(Integer errorCode) {
//         this.errorCode = errorCode;
//     }
// 
//     @Override
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// }


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.smartx.summer.bean.State;
import org.smartx.summer.exception.AuthenticationException;
import org.smartx.summer.exception.BaseServiceException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolationException;
package org.smartx.summer.interceptor;




/**
 * <p> 统一的异常拦截处理 所有错误码均为相应的http错误码乘10得到 </p>
 *
 * <b>Creation Time:</b> 2016年10月24日
 *
 * @author Ming
 * @since summer 0.1
 */
@ControllerAdvice
public class WebAppExceptionAdvice {

    private static final Logger logger = LoggerFactory.getLogger(WebAppExceptionAdvice.class);

    @ExceptionHandler({Exception.class})
    @ResponseBody
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    public State exceptionHandler(Exception ex) {
        logger.error("Exception:{}", ex);
// Path: summer-core/src/main/java/org/smartx/summer/bean/State.java
// public class State implements Serializable {
// 
//     private Integer code;
// 
// 
//     private String msg;
// 
//     public State() {
//     }
// 
// 
//     public State(Integer code, String msg) {
//         this.code = code;
//         this.msg = msg;
//     }
// 
//     public Integer getCode() {
//         return code;
//     }
// 
//     public void setCode(Integer code) {
//         this.code = code;
//     }
// 
//     public String getMsg() {
//         return msg;
//     }
// 
//     public void setMsg(String msg) {
//         this.msg = msg;
//     }
// 
//     public static State buildFromBindingResult(BindingResult bindingResult) {
//         StringBuilder stringBuilder = new StringBuilder();
//         bindingResult.getAllErrors().forEach(b -> {
//             stringBuilder.append(b.getDefaultMessage()).append("\n");
//         });
//         return new State(HttpStatus.BAD_REQUEST.value() * 10, stringBuilder.toString());
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/exception/AuthenticationException.java
// public class AuthenticationException extends RuntimeException {
//     private static final long serialVersionUID = -8799659324455306881L;
// 
//     public AuthenticationException(String message) {
//         super(message);
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/exception/BaseServiceException.java
// public class BaseServiceException extends Exception {
//     private Integer errorCode;
// 
//     private String message;
// 
//     public BaseServiceException(Integer errorCode, String message) {
//         this.errorCode = errorCode;
//         this.message = message;
//     }
// 
//     public BaseServiceException() {
//         super();
//     }
// 
//     public BaseServiceException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public BaseServiceException(State state) {
//         super();
//         this.errorCode = state.getCode();
//         this.message = state.getMsg();
//     }
// 
//     public Integer getErrorCode() {
//         return errorCode;
//     }
// 
//     public void setErrorCode(Integer errorCode) {
//         this.errorCode = errorCode;
//     }
// 
//     @Override
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// }


// Path: summer-core/src/main/java/org/smartx/summer/interceptor/WebAppExceptionAdvice.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.smartx.summer.bean.State;
import org.smartx.summer.exception.AuthenticationException;
import org.smartx.summer.exception.BaseServiceException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolationException;

package org.smartx.summer.interceptor;




/**
 * <p> 统一的异常拦截处理 所有错误码均为相应的http错误码乘10得到 </p>
 *
 * <b>Creation Time:</b> 2016年10月24日
 *
 * @author Ming
 * @since summer 0.1
 */
@ControllerAdvice
public class WebAppExceptionAdvice {

    private static final Logger logger = LoggerFactory.getLogger(WebAppExceptionAdvice.class);

    @ExceptionHandler({Exception.class})
    @ResponseBody
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    public State exceptionHandler(Exception ex) {
        logger.error("Exception:{}", ex);
        return new State(HttpStatus.INTERNAL_SERVER_ERROR.value() * 10, ex.getMessage());