From bd88ee937acfbf6ae56e93874884e8209009dd7a Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 9 Sep 2018 17:29:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dresponse=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=ADdata=E4=B8=BAnull=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HttpController.java | 15 ++++++++++--- .../ProxycenterApplicationTests.java | 22 +++++++++++++------ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/originaldreams/proxycenter/controller/HttpController.java b/src/main/java/com/originaldreams/proxycenter/controller/HttpController.java index f273221..6c13098 100644 --- a/src/main/java/com/originaldreams/proxycenter/controller/HttpController.java +++ b/src/main/java/com/originaldreams/proxycenter/controller/HttpController.java @@ -8,6 +8,7 @@ import com.originaldreams.common.util.StringUtils; import com.originaldreams.common.util.ValidUserName; import com.originaldreams.proxycenter.cache.CacheUtils; +import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,6 +53,8 @@ public class HttpController { */ private final static String SPLIT_KEY_VALUE = ":"; + private static final String NULL_STRING = "null"; + private static final String API_PREFIX = "/api"; /** @@ -430,14 +433,20 @@ private ResponseEntity getResponseFromException(HttpClientErrorException excepti * @param response */ private void setCacheForLogon(ResponseEntity response){ + String result = response.getBody(); + try{ - String result = response.getBody(); + JSONObject json = new JSONObject(result); int success = json.getInt("success"); //登录不成功,不记录session if(success != 0 ){ return; } + Object data = json.get("data"); + if (NULL_STRING.equals(data.toString())) { + return; + } int userId = json.getInt("data"); logger.info("logonWithUserName userId:" + userId); //将userId放入Session @@ -467,9 +476,9 @@ private void setCacheForLogon(ResponseEntity response){ //角色名放入缓存 CacheUtils.userRoleMap.put(userId,roleName); logger.info("logonWithUserName roleName :" + roleName + ", routerIds:" + routerIds); - }catch (Exception e){ + }catch (JSONException e){ e.printStackTrace(); - logger.error("setCacheForLogon" + e.getMessage()); + logger.error("setCacheForLogon {}", e.getMessage()); } diff --git a/src/test/java/com/originaldreams/proxycenter/ProxycenterApplicationTests.java b/src/test/java/com/originaldreams/proxycenter/ProxycenterApplicationTests.java index 5ec900a..fd9b509 100644 --- a/src/test/java/com/originaldreams/proxycenter/ProxycenterApplicationTests.java +++ b/src/test/java/com/originaldreams/proxycenter/ProxycenterApplicationTests.java @@ -1,19 +1,27 @@ package com.originaldreams.proxycenter; -import org.json.JSONObject; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; public class ProxycenterApplicationTests { @Test public void test() throws Exception{ String a = "{\"success\":0,\"data\":null,\"message\":null}"; - JSONObject json = new JSONObject(a); - json.getJSONObject("data"); - System.out.println(json.getJSONObject("data")); + ObjectMapper mapper = new ObjectMapper(); + Map map; + try { + map = mapper.readValue(a, Map.class); + } catch (IOException e) { + e.printStackTrace(); + return; + } + System.out.println(map.get("data")); + + } From 9d456ee5ea074d2b2aca3cb35acd0bc167ff9a71 Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 9 Sep 2018 18:30:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8D=95=E8=8E=B7RestException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../exception/RestExceptionHandler.java | 102 ++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/originaldreams/proxycenter/exception/RestExceptionHandler.java diff --git a/pom.xml b/pom.xml index 2e18487..f067acc 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ com.originaldreams common - 0.0.11 + 0.0.12 diff --git a/src/main/java/com/originaldreams/proxycenter/exception/RestExceptionHandler.java b/src/main/java/com/originaldreams/proxycenter/exception/RestExceptionHandler.java new file mode 100644 index 0000000..ef5cfe5 --- /dev/null +++ b/src/main/java/com/originaldreams/proxycenter/exception/RestExceptionHandler.java @@ -0,0 +1,102 @@ +package com.originaldreams.proxycenter.exception; + + +import com.originaldreams.common.exception.BadRequestException; +import com.originaldreams.common.exception.ResourceNotFoundException; +import com.originaldreams.common.response.MyServiceResponse; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +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.RestController; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +/** + * 自定义异常 + * @author magaofei + */ +@ControllerAdvice +@RestController +public class RestExceptionHandler extends ResponseEntityExceptionHandler { + + private static final String NOT_FOUND_MESSAGE = "你访问的资源不存在"; + private static final String BAD_REQUEST_MESSAGE = "参数错误"; + + private static ResponseEntity buildBadRequestEntity(Exception ex, WebRequest request) { + String message = ex.getMessage(); + if (message == null) { + message = BAD_REQUEST_MESSAGE; + } + + return new ResponseEntity<>( + new MyServiceResponse(MyServiceResponse.SUCCESS_CODE_FAILED, message), + HttpStatus.BAD_REQUEST); + } + + @Override + protected ResponseEntity handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + return buildBadRequestEntity(ex, request); + } + + + @Override + protected ResponseEntity handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + return buildBadRequestEntity(ex, request); + } + + @Override + protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + return buildBadRequestEntity(ex, request); + } + + @Override + protected ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + return buildBadRequestEntity(ex,request); + } + + @Override + protected ResponseEntity handleServletRequestBindingException(ServletRequestBindingException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + return buildBadRequestEntity(ex, request); + } + + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity handleNotFoundException(ResourceNotFoundException ex, WebRequest request) { + + String message = ex.getMessage(); + if (message == null) { + message = NOT_FOUND_MESSAGE; + } + + return new ResponseEntity<>( + new MyServiceResponse(MyServiceResponse.SUCCESS_CODE_FAILED, message), + HttpStatus.NOT_FOUND); + } + + @ExceptionHandler({BadRequestException.class, MethodArgumentTypeMismatchException.class}) + public ResponseEntity handleBadRequestException(Exception ex, WebRequest request) { + return buildBadRequestEntity(ex, request); + } + + + + + + @ExceptionHandler(Exception.class) + public ResponseEntity handleAllExceptions(Exception ex, WebRequest request) { + + MyServiceResponse errorDetails = new MyServiceResponse( + MyServiceResponse.SUCCESS_CODE_FAILED, + ex.getMessage()); + return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR); + } + + +}