为什么Spring 3.2只根据requestparam为“0”或“1”来映射我的布尔值?
@RequestParam(required= false, defaultValue = "false") Boolean preview
如果请求参数"true"
很奇怪,预览只会是"?preview=1"
我希望它是"?preview=true"
。我该怎么做?
答案 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;
}