Custom error message удаление лишних полей

162
24 июля 2019, 06:00

В rest api решил сделать custom exception handler через @ControllerAdvice . И хотел, чтобы клиент получал, например, лишь 3 поля моего класса Exception . В клиентской части имеется следующий код:

  try {
        ResponseEntity<> result = restTemplate.postForEntity(uri, entity, Example.class);
    } catch (HttpClientErrorException ex) {
        System.out.println("++++"+ex.getResponseBodyAsString());
    }

Вывод в консоль:

++++{"cause":null,"stackTrace":[{"methodName":"handleMethodArgumentNotValid","fileName":"CustomExceptionHandler.java","lineNumber":49,"className":"net.thumbtack.school.netexam.serverexception.CustomExceptionHandler","nativeMethod":false},{"methodName":"handleException","fileName":"ResponseEntityExceptionHandler.java","lineNumber":169,"className":"org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler","nativeMethod":false},{"methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"sun.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"Method.java","lineNumber":498,"className":"java.lang.reflect.Method","nativeMethod":false},{"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":209,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":136,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":102,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"methodName":"doResolveHandlerMethodException","fileName":"ExceptionHandlerExceptionResolver.java","lineNumber":404,"className":"org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver","nativeMethod":false},{"methodName":"doResolveException","fileName":"AbstractHandlerMethodExceptionResolver.java","lineNumber":61,"className":"org.sp

Возможно ли в респонсе оставить только поля класса моего Exception, а остальные убрать(cause,stackTrace и т.д.)

Answer 1

Это должно вам помочь:

@ControllerAdvice
public class HandlerExceptionController {
    private static final String STATUS = "status";
    private static final String MESSAGE = "message";
    @ExceptionHandler(ValidationException.class)
    public ResponseEntity<Map<String, Object>> exceptionHandler(ValidationException exception) {
        Map<String, Object> responseException = new HashMap<>();
        responseException.put(STATUS, HttpStatus.UNPROCESSABLE_ENTITY.value());
        responseException.put("errors", exception.getErrors());
        responseException.put(MESSAGE, exception.getMessage());
        return new ResponseEntity<>(responseException, HttpStatus.UNPROCESSABLE_ENTITY);
    }
}
READ ALSO
&#39;com.company.Advertizing&#39; is not an enclossing class

'com.company.Advertizing' is not an enclossing class

у меня есть два файла Advertizingjava и Main

137
Android разработка приложений. Как узнать отображен ли на экране элемент разметки на экране зная его id

Android разработка приложений. Как узнать отображен ли на экране элемент разметки на экране зная его id

Как узнать нарисован (отображен) ли на экране тот или иной элемент разметки на экране зная его id? ДопустимВызывается экран, на котором генерируется:...

107
Platform.runLater

Platform.runLater

Я хочу открыть новое окно в контроллере другого окна через другой классНа пример вот функция которая находится в контроллере:

140