45

为什么 Spring 3.2 仅基于 requestparam 为 "0" 或 "1" 映射我的布尔值?

@RequestParam(required= false, defaultValue = "false") Boolean preview

"true"只有当请求参数"?preview=1"是奇怪的时候才会预览

我希望它是"?preview=true"。我怎么做?

4

4 回答 4

95

我认为我们可能需要更多细节才能有效地回答您的问题。

我有如下工作的 Spring 3.2 代码:

@RequestMapping(value = "/foo/{id}", method = RequestMethod.GET)
@ResponseBody
public Foo getFoo(
    @PathVariable("id") String id, 
    @RequestParam(value="bar", required = false, defaultValue = "true")
        boolean bar)
{ 
    ... 
}

Spring 正确地解释?bar=true, ?bar=1, or?bar=yes为真,and ?bar=false, ?bar=0, or?bar=no为假。

True/false 和 yes/no 值忽略大小写。

于 2014-08-04T16:09:56.923 回答
20

Spring 应该能够将true1yeson解释为true布尔值...检查StringToBooleanConverter

于 2013-10-04T18:45:30.270 回答
0

我们可以使用

@GetMapping("/getAudioDetails/organizations/{orgId}/interactions/{interactionId}")
public ResponseEntity<?> getAudioDetails(@PathVariable("orgId") String orgId,@PathVariable("interactionId") String interactionId,
        @RequestParam(name = "verbose", required = false, defaultValue = "false") boolean verbose){
    System.out.println(verbose);
    return null;
}

其中详细是一个布尔标志,默认情况下恰好为假,可以从下面的 api 调用中的 inage 中引用。在此处输入图像描述

于 2021-03-30T05:10:46.123 回答
0

可以使用jackson的JsonDeserialize注解,简洁干净

创建以下反序列化器:

public class BooleanDeserializer extends JsonDeserializer<Boolean> {
    public BooleanDeserializer() {
    }

    public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        return !"0".equals(parser.getText());
    }
}

并将注释添加到您的 DTO,如下所示:

public class MyDTO {
    @NotNull
    @JsonDeserialize(using = BooleanDeserializer.class)
    private Boolean confirmation;
}
于 2020-05-28T11:28:40.980 回答