English 中文(简体)
2. 变化的春天结构
原标题:Change Spring Boots default JSON error response structure

我与斯普林布特一起建造了一台APIC。 在春天投掷错误时,缺席的JSON结构是:

{
  "timestamp": 1477425179601,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/categoriess"
}

这一结构不同于被动反应回去,因此,我想改变春天,使用与我自己的结构相同的结构。

My error response are structured like this:

{
    "errors": [
        {
            "code": 999404,
            "message": "The resource you were looking for could not be found"
        }
    ]
}

我怎么做呢? 我利用一名独任之手进行审判,但我可以列举确定这种例外情况的正确例外。 我也谨保证,按404或错误(500等)的计算,Http身份仍然正确归还。

问题回答

我对此有另一个看法,并确实设法把为我工作的东西放在一起。

@Bean
    public ErrorAttributes errorAttributes() {
        return new DefaultErrorAttributes() {
            @Override
            public Map<String, Object> getErrorAttributes(RequestAttributes requestAttributes, boolean includeStackTrace) {
                Map<String, Object> errorAttributes = super.getErrorAttributes(requestAttributes, includeStackTrace);

                Map<String, Object> error = new HashMap<>();
                error.put("code", errorAttributes.get("status"));
                error.put("message", errorAttributes.get("error"));

                Map<String, Object> errorResponse = new HashMap<>();
                errorResponse.put("errors", error);

                return errorResponse;
            }
        };
    }

下面的JSON答复以及任何头脑/http://www.un.org/Depts/index.html。

{
  "errors": {
    "code": 404,
    "message": "Not Found"
  }
}

这对春天产生的错误似乎有很大作用,而我自己的例外是,在主计长或特别主计长兼任特别助理的级别上处理。

这样做的一个可能途径是使用@ExceptionHandler通知,在你的控制人内部制造手工艺。

@RestController
@RequestMapping(produces = APPLICATION_JSON_VALUE)
public class MyController {

    @RequestMapping(value = "/find", method = GET)
    public Object find() {
        throw new UnsupportedOperationException("Not implemented yet!");
    }

    @ExceptionHandler
    public ErrorListModel handleException(Exception exception) {
        ExceptionModel exceptionModel = new ExceptionModel(1337, exception.getMessage());

        ErrorListModel list = new ErrorListModel();
        list.add(exceptionModel);

        return list;
    }

    private class ErrorListModel {
        private List<ExceptionModel> errors = new ArrayList<>();

        public void add(ExceptionModel exception) {
            errors.add(exception);
        }

        public List<ExceptionModel> getErrors() {
            return errors;
        }
    }

    private class ExceptionModel {
        private int code;
        private String message;

        public ExceptionModel(int code, String message) {
            this.code = code;
            this.message = message;
        }

        public int getCode() {
            return code;
        }

        public String getMessage() {
            return message;
        }
    }
}

私人课程ErrorListModelExceptionModel 我只是帮助确定由此产生的“智者”机构应如何看待,我假定你已经拥有类似的课程。

find 方法只是给我们留下了一种例外,而这种例外被handleException<>/code>拦截。 方法,因为它附有<代码>@ExceptionHandler的说明。 在此,我们创设了一个<代码>ExceptionModel,将其填入原始例外情形中的资料,并添加到一个<代码>ErrorListModel上,然后我们回去。

这一博客员额从2013年起,对特征的解释比我任何时候都好,还提到了另一个选择:@ControllerAdvice。 它基本上允许你在其他控制人员中重新使用例外处理方法。





相关问题
WAF FILE could not EXPORT due to no WEB PROJECT option found

I was trying to create a war file on spring tool suite 4 (windows version). But as I was about to export the it to the local file system, I couldn t find the web project (wiseai-console) option of the ...

Combine multiple cb.literal() into 1 Expression

I am working on a Spring Boot project that uses PostgreSQL. I want to create a advanced search feature where user can search through the jsonb column that I have in many of my tables. Somewhere in my ...

Error using criteriaBuilder.max() for LocalDate

I am trying to get max date using criteria builder in a subquery. But I am getting this error Required type: Expression Provided: Expression Subquery<LocalDate> subRoot = criteriaQuery....

热门标签