Spring @RequestParam映射布尔值基于1或0而不是true或false

时间:2013-10-04 10:18:38

标签: spring request boolean http-request-parameters

为什么Spring 3.2只根据requestparam为“0”或“1”来映射我的布尔值?

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

如果请求参数"true"很奇怪,预览只会是"?preview=1"

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

4 个答案:

答案 0 :(得分:57)

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

我按照以下方式使用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?bar=yes解释为true,将?bar=false?bar=0?bar=no解释为false 。

真/假,是/否值忽略大小写。

答案 1 :(得分:11)

Spring应该能够将{em> true , 1 解释为true布尔值...检查StringToBooleanConverter

答案 2 :(得分:0)

您可以使用杰克逊的JsonDeserialize注释,简洁明了

创建以下反序列化器:

parallel tasks, count

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

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

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

答案 3 :(得分: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;
}

其中verbose是一个布尔标志,默认情况下它恰好是false,可以从下面的api调用中引用。enter image description here