gpt4 book ai didi

java - 如何在模型映射器转换器中保留异常消息

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:36 25 4
gpt4 key购买 nike

我正在使用 ModelMapper,并在那里定义了一些 PostConverters,例如:

    modelMapper
.createTypeMap(TestDTO.class, Test.class)
.setPostConverter(converter -> {
Test dest = converter.getDestination();
TestDTO source = converter.getSource();
if (source.getDependency() != null) {
Dependency dependency = dependencyRepository
.findById(source.getDependency().getId())
.orElseThrow(() -> new BadRequestException("Invalid Dependency"));
dest.setDependency(dependency);
}
return dest;
});

该代码的问题是,如果我为依赖项输入了无效的 id,那么我会收到如下响应负载:

{
"timestamp": "2018-09-18T13:51:05.203+0200",
"status": 400,
"error": "Bad Request",
"message": "ModelMapper mapping errors:\n\n1) Converter ....",
"path": "/api/test"
}

但我希望在错误消息中得到无效依赖项。知道如何做吗?

这是 BadRequestException 的定义:

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BadRequestException extends RunTimeException {

public BadRequestException() {
super("Bad Request");
}

public BadRequestException(String message) {
super(message);
}

public BadRequestException(String pattern, Object... parameters) {
super(pattern, parameters);
}
}

最佳答案

错误似乎出在您使用注释的异常处理中,请参见此处:
https://docs.spring.io/spring/docs/4.2.4.RELEASE/javadoc-api/org/springframework/web/bind/annotation/ResponseStatus.html

它说:
“警告:当在异常类上使用此注释时,或者设置此注释的原因属性时,将使用 HttpServletResponse.sendError 方法。”默认情况下,该方法似乎不使用您的异常消息。因此,您可以尝试定义“硬编码”消息并使用

给出具体字符串
 @ResponseStatus(value = HttpStatus.BadRequest, reason = "Invalid Dependency")

或者以这种方式进行:

public class BadRequestException extends RunTimeException {

public BadRequestException() {
super("Bad Request");
}

public BadRequestException(String message) {
super(message);
}

public BadRequestException(String pattern, Object... parameters) {
super(pattern, parameters);
}

}

@ControllerAdvice
public class CustomExceptionResolver {

@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Error> resolveAndSendException(BadRequestException e) throws IOException {
return new ResponseEntity<Error>(e, HttpStatus.BadRequest);
}
}

我更喜欢第一个,稍微改变一下:
引入一个名为 InvalidDependencyException 的新类,并将第一个示例应用于此类,这样您就可以获得消息,并且仍然可以将集成消息用于任何其他错误请求。 (当然把它扔到你的流部分)

关于java - 如何在模型映射器转换器中保留异常消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52385992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com