为什么 Spring 3.2 仅基于 requestparam 为 "0" 或 "1" 映射我的布尔值?
@RequestParam(required= false, defaultValue = "false") Boolean preview
"true"
只有当请求参数"?preview=1"
是奇怪的时候才会预览
我希望它是"?preview=true"
。我怎么做?
为什么 Spring 3.2 仅基于 requestparam 为 "0" 或 "1" 映射我的布尔值?
@RequestParam(required= false, defaultValue = "false") Boolean preview
"true"
只有当请求参数"?preview=1"
是奇怪的时候才会预览
我希望它是"?preview=true"
。我怎么做?
我认为我们可能需要更多细节才能有效地回答您的问题。
我有如下工作的 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 值忽略大小写。
Spring 应该能够将true、1、yes和on解释为true
布尔值...检查StringToBooleanConverter。
我们可以使用
@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;
}
可以使用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;
}