首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Spring MVC中将类型转换器的使用限制在特定的控制器上?

如何在Spring MVC中将类型转换器的使用限制在特定的控制器上?
EN

Stack Overflow用户
提问于 2020-08-07 04:06:25
回答 1查看 114关注 0票数 0

在Spring MVC中处理请求参数、路径变量或表单字段时,我必须处理typeMismatch错误。它们甚至在验证开始之前就发生了,这有时会令人恼火。假设我有一个用标准验证约束注释的Integer参数,类似于:@Min(value = 0, message = "Only non-negative integer values can be accepted")。然后,我可以创建一个简单的String to Integer转换器来抑制NumberFormatException,同时将所有无法解析的字符串值设置为-1,这样它们就可以通过前面提到的@Min约束进一步失效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
final class StringToInteger implements Converter<String, Integer> {

    public Integer convert(String source) {
        try{
            return Integer.valueOf(source);
        } catch (NumberFormatException ex) {
            return -1;
        }
    }

}

当使用with Spring Boot时,@Component注解会自动启动这个转换器并在整个应用程序上下文中运行,但是如果我想将它的使用限制在特定的Controller甚至目标请求上,该怎么办呢?最简单的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-08-07 04:18:15

您可以使用DataBinder。你可以在你的控制器中声明它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @InitBinder
    public void customizeBinding (DataBinder binder) {
        DefaultConversionService conversionService = new DefaultConversionService();
        conversionService.addConverter(new StringToInteger());
        binder.setConversionService(conversionService);
    }

EDIT:您可以使用格式化程序来代替。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@InitBinder
public void customizeBinding (DataBinder binder) {
    binder.addCustomFormatter(new StringToInteger());
}

class StringToInteger implements Formatter<Integer> {

    @Override
    public Integer parse(String s, Locale locale) throws ParseException {
        try {
            return Integer.valueOf(s);
        }
        catch (NumberFormatException ex) {
            return -1;
        }
    }

    @Override
    public String print(Integer i, Locale locale) {
        return Objects.toString(i);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63295039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文