当前位置: 首页 > 知识库问答 >
问题:

获取根验证原因

夔高寒
2023-03-14

我有一个restcontroller来验证它的输入:

class Item {}
class ItemHolder {
  Item item;
}

@RestController
public class ItemRestController {
    @GetMapping
    public String get(@Valid ItemHolder itemHolder) { }
}
class CannotConvertException extends RuntimeException {}

class ItemConverter implements Converter<String, Item> {
  @Override
  public Item convert(String value) {
    throw new CannotConvertException("Important failure message: " + value);
  }
}
@ControllerAdvice
class ResponseExceptionHandler extends ResponseEntityExceptionHandler {
  @Override
  protected ResponseEntity<Object> handleBindException(
            BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {

        // How to get only the message from CannotConvertException here?
    }

HandleBindException中,我得到的消息(即ex.getMessage())类似于:

org.springframework.validation.BeanPropertyBindingResult:1 errors字段“item”上的对象“item holder”字段错误:拒绝的值[非常糟糕的值];代码[typemismatch.itemholder.item,typemismatch.item,typemismatch.com.example.item,typemismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[itemholder.item,item];参数[];默认消息[item]];默认消息[未能将类型“java.lang.String[]”的值转换为必需的类型“com.example.Item”;嵌套异常为org.springframework.core.convert.conversionFailedException:未能将值“very bad value”的[java.lang.String]类型转换为[com.example.Item]类型;嵌套异常为com.example.CanNotConvertException:重要失败消息:very bad value]

如果不使用诸如字符串解析或反射之类的黑客攻击,我将如何确保异常处理程序能够只处理重要失败消息:very bad value部分,而不会在它之前出现所有噪声?

如果这是一个更好的选择,我可以更换转换器。

共有1个答案

陆宝
2023-03-14

尝试抛出MethodArgumentTypeMismatchException,而不是转换器中的自定义异常,并在建议中添加一个新方法来处理这些类型的异常。

这应该能解决你的问题!

 类似资料:
  • 接口说明 获取验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/server/1.0.0/getValidCode 是否需要登录 否 请求字段说明 无 响应字段说明 无 响应成功示例 {} 响应失败示例 {} 响应接受类型 image/jpeg;charset=UTF-8 响应状态码 HTTP状态码 原因 204 N

  • 错误: TypeError:无法读取未定义的LoginForm c:/reactjs/hello-world/src/components/accountbox/LoginForm.js的属性“state”:23 2023 value={this.state.input.email}^24 onchange={this.handlechange}25 class=“form-control”26

  • 接口说明 获取验证码图片 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/cap

  • 我正在使用axis2。战争在我耳边响起,我正在将我所有的jar打包在APP-INF中,并从axis2/META-INT/Manifest的窗口指向它们。在[类路径]中。我正在使用ws-security。 当我从axis2客户端请求它时,我得到了以下错误。 12:55:05359信息[STDOUT][ERROR]org/opensaml/xml/validation/ValidatingXMLObj

  • 我有一个简单的登录模型类,几乎没有数据注释验证 View是一个部分View,如下所示: 我相信我已经做了验证消息显示所需的所有事情,但它没有,客户端验证也没有。在母版页的头部区域,我还包括了以下脚本 是什么导致了这个问题?解决办法是什么?

  • 我的应用程序中有一个验证,它使用cookies(request.getCookies)来验证验证码。 我想为这个captcha验证创建一个ConstraintValidator,以便它与其他bean的属性一起进行验证——正如JSR-303 bean验证所指定的那样。 有没有办法在ConstraintValidator中检索HttpServletRequest?