0

我有一个像这样的控制器方法

  @RequestMapping(value = "/update", method = RequestMethod.POST)
  RestResponse updateId(@RequestParam(value = "cityId") Optional<Integer> cityId) {
  }

现在,当我在cityId没有值的情况下发送时,cityId.isPresent()返回 false,这是错误的,因为我实际上包含cityId在我的请求参数中,但我只是没有设置值。

我注意到这种行为不会发生在 上Optional<String>,它实际上告诉我参数存在,即使它没有值。

那么我应该如何处理诸如此类的参数Optional<Integer>呢?我只需要确定参数是否已发送,即使它没有值(因为它是可选的,如果发送时没有值,我必须更新数据库)

编辑:看起来我上面写的很混乱,我会尝试再次描述这个问题

@RequestMapping(value = "/temp", method = RequestMethod.POST)
void temporary(@RequestParam(value = "homeCityId") Optional<Integer> homeCityId) {
    if(homeCityId.isPresent()) {
        System.out.println("homeCityId is Present");
    } else {
        System.out.println("homeCityId is Not Present");
    }
}

我提出一个包含homeCityId空值的请求,我得到homeCityId is Not Present. 如何区分具有homeCityId空值的请求和根本不包含的请求homeCityId

4

1 回答 1

1

如何区分具有homeCityId空值的请求和根本不包含的请求homeCityId

homeCityId无论是否为空,您都必须将存在的情况作为单个案例来处理。然后你需要另一个处理程序来缺席。

首先,您可以使用@RequestMapping#params设置homeCityId为要调用的处理程序的必要参数映射。

@RequestMapping(value = "/temp", params = { "homeCityId" }, method = RequestMethod.POST)
public String present(@RequestParam(value = "homeCityId") Integer homeCityId) {

然后检查homeCityId是否null

其次,有第二个不需要homeCityId参数的处理程序。

@RequestMapping(value = "/temp", method = RequestMethod.POST)
public String notPresent() {

如果参数存在,Spring MVC 将始终调用第一个(并且您将可以访问其值。如果参数不存在,它将调用第二个。由于它不存在,因此您无需担心任何值。

于 2016-01-05T16:50:06.037 回答