Spring 将@RequestParam转换为小写
我在许多控制器上有许多Spring 将@RequestParam转换为小写,spring,spring-boot,spring-mvc,Spring,Spring Boot,Spring Mvc,我在许多控制器上有许多@RequestParam,我需要强制执行这些控制器才能将其作为小写字母(例如@RequestParam-String-email)。除了转到每个端点并将参数值设置为小写版本之外,还有更简单的方法吗 我尝试的是创建一个过滤器,它传递一个覆盖getParameter的HttpServletRequestWrapper,并沿着链传递它,但我发现@RequestParam与getParameter()无关,可能Spring在这里使用反射 有什么建议吗?我会选择为java bean
@RequestParam
,我需要强制执行这些控制器才能将其作为小写字母(例如@RequestParam-String-email
)。除了转到每个端点并将参数值设置为小写版本之外,还有更简单的方法吗
我尝试的是创建一个过滤器,它传递一个覆盖getParameter
的HttpServletRequestWrapper
,并沿着链传递它,但我发现@RequestParam
与getParameter()
无关,可能Spring在这里使用反射
有什么建议吗?我会选择为java bean提供的
@InitBinder
和属性编辑器支持。如果我理解正确,您希望所有的@RequestParam
参数都是小写的。为了实现这一点,我将声明我自己的StringLowerCaseEditor
类,如下所示
public class StringLowerCaseEditor extends PropertyEditorSupport
{
@Override
public String getAsText()
{
return getValue().toString();
}
@Override
public void setAsText( String text ) throws IllegalArgumentException
{
setValue( text.toLowerCase() );
}
}
然后,在@Controller
类中,可以将一个方法与注释@InitBinder
一起使用,该注释处理到达该控制器的所有请求。来自spring的文档,关于注释
此类init binder方法支持请求映射的所有参数
支持,但命令/窗体对象和相应的验证除外
结果对象。Init binder方法不能有返回值;他们
通常被宣布为无效
或者,为了产生全局影响,将@InitBinder方法添加到@ControllerAdvice
类中。这将在调用每个控制器时执行。通过@ControllerAdvice(basePackages=“”)
如果只想处理特定的@RequestParam
,可以将@InitBinder
与预期的参数一起使用
@InitBinder( "customerEmail" ) // Request param, can be comma separated
public void initBinder( WebDataBinder dataBinder )
{
StringLowerCaseEditor lowerCaseEditor = new StringLowerCaseEditor();
dataBinder.registerCustomEditor( String.class, lowerCaseEditor );
}
我将使用为Javabean提供的@InitBinder
和属性编辑器支持。如果我理解正确,您希望所有的@RequestParam
参数都是小写的。为了实现这一点,我将声明我自己的StringLowerCaseEditor
类,如下所示
public class StringLowerCaseEditor extends PropertyEditorSupport
{
@Override
public String getAsText()
{
return getValue().toString();
}
@Override
public void setAsText( String text ) throws IllegalArgumentException
{
setValue( text.toLowerCase() );
}
}
然后,在@Controller
类中,可以将一个方法与注释@InitBinder
一起使用,该注释处理到达该控制器的所有请求。来自spring的文档,关于注释
此类init binder方法支持请求映射的所有参数
支持,但命令/窗体对象和相应的验证除外
结果对象。Init binder方法不能有返回值;他们
通常被宣布为无效
或者,为了产生全局影响,将@InitBinder方法添加到@ControllerAdvice
类中。这将在调用每个控制器时执行。通过@ControllerAdvice(basePackages=“”)
如果只想处理特定的@RequestParam
,可以将@InitBinder
与预期的参数一起使用
@InitBinder( "customerEmail" ) // Request param, can be comma separated
public void initBinder( WebDataBinder dataBinder )
{
StringLowerCaseEditor lowerCaseEditor = new StringLowerCaseEditor();
dataBinder.registerCustomEditor( String.class, lowerCaseEditor );
}
是否希望@RequestParameters不区分大小写?或者您希望将请求参数的值转换为小写形式?@jetro157我希望这些值是小写形式的,因此无论何时使用它们,都可以保证我处理的是小写形式。并且只有某些参数,而不是控制器中的所有参数。是否希望@RequestParameters不区分大小写?或者您希望将请求参数的值转换为小写形式?@jetro157我希望这些值是小写形式的,因此无论何时使用它们,都可以保证我处理的是小写形式。而且只有某些参数,而不是控制器内的所有参数。有趣的方法,但我不希望所有RequestParams都是小写,我只希望某些参数是小写。例如,所有接收电子邮件参数的端点的值都应为小写。。通过这种方式,我保证数据库中保存的所有电子邮件都是小写的,而不必在每个端点中自己将其小写(db只是一个例子,即使我记录电子邮件时,我希望它是用小写写的)。可能吗?感谢you@prettyvoid我已经更新了我的答案,请有一个有趣的方法,但我不希望所有的RequestParams都是小写的,我只希望某些是小写的。例如,所有接收电子邮件参数的端点的值都应为小写。。通过这种方式,我保证数据库中保存的所有电子邮件都是小写的,而不必在每个端点中自己将其小写(db只是一个例子,即使我记录电子邮件时,我希望它是用小写写的)。可能吗?感谢you@prettyvoid我已经更新了我的答案,请看一看