【问题标题】:Spring - Handling null values in Request ParametersSpring - 处理请求参数中的空值
【发布时间】:2018-11-08 19:34:00
【问题描述】:

春季(4.3.9):

从客户端作为空值发送到服务器的请求参数,当通过请求参数获取时,空对象在请求中被视为字符串空值:

@RequestParam(value = key, required = false) Integer key

至于解决方案,我可以通过客户端处理这个问题,并首先防止 null 被传递,我无法从中得到明确的解决方案 (JavaScript: Formdata append null value - NumberFormatException)。

谁能帮我看看spring框架中的什么类或方法将这个从null对象转换为字符串null。

【问题讨论】:

  • 您通常在寻找 HttpMessageConverterConverter 框架,但您还没有真正描述足够的案例来了解是否存在潜在问题(例如,不清楚是否你的意思是s == nulls.equals("null"))。包含一个实际的 HTTP 请求会很有帮助。

标签: java spring null request http-request-parameters


【解决方案1】:

无论您为@ReuqestParam 提供什么内容,默认情况下它将被视为字符串,这就是null 被视为"null" 字符串的原因。在 spring 框架中,Converter<S, R>ConverterFactory<S, R> 将从 String 转换为相应的类型。

您可以编写自定义转换器并将其添加到spring注册表here

public class StringToIntegerConverter implements Converter<String, Integer> {

@Override
public Integer convert(String from) {
    // custom logic
   }
}

注册

@Configuration
public class WebConfig implements WebMvcConfigurer {

@Override
public void addFormatters(FormatterRegistry registry) {
    registry.addConverter(new StringToIntegerConverter());
       }
 }

【讨论】:

  • 感谢您的信息。您指出的转换器将字符串转换为@RequestParam 中提到的所需类型,但是您能指出从客户端传递的空对象在哪里转换为字符串空. -------------------------------------------------- -------------------------------------------------- ----- 我可以看到,当我执行 request.getParameter("key") 时,它会在我的第一个过滤器本身中返回字符串 null ("null")。所以我假设这种转换发生在 apache http 层。我只需要知道类文件,解析这个的方法。
  • 我不确定这一点,可能是前端控制器是请求的主要点
  • 感谢您的及时帮助。我将暂时处理此客户以避免出现问题,并且我将保持开放状态以获得更好的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2021-11-22
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多