true 또는 false 대신 1 또는 0을 기준으로 Spring @RequestParam 매핑 부울
요청 매개 변수가 "0" 또는 "1"임을 기반으로 Spring 3.2가 내 부울만 매핑하는 이유는 무엇입니까?
@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)
{
...
}
스프링이 올바르게 해석됨?bar=true
,?bar=1
, 아니면?bar=yes
사실로서 그리고?bar=false
,?bar=0
, 아니면?bar=no
거짓으로
true/false 및 yes/no 값이 대소문자를 무시합니다.
스프링은 true, 1, yes 등을 해석할 수 있어야 합니다.true
부울 값...StringToBoolean Converter를 선택합니다.
jackson의 JsonDeserialize 주석을 사용할 수 있습니다. 짧고 깨끗하게 주석을 병렬화합니다.
다음 deserializer를 만듭니다.
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;
}
사용할 수 있습니다.
@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는 API 호출 시 아래 inage에서 참조할 수 있듯이 기본적으로 false인 부울 플래그입니다.
@RequestParam에서 value=" preview"이 누락된 것 같습니다.이로 인해 Spring은 변수 미리보기를 항상 false로 설정합니다. 이 값이 기본값입니다.
@RequestParam(value = "preview", required= false, defaultValue = "false") Boolean preview
언급URL : https://stackoverflow.com/questions/19178820/spring-requestparam-mapping-boolean-based-on-1-or-0-instead-of-true-or-false
'programing' 카테고리의 다른 글
Protractor - 브라우저를 사용할 위치입니다.WaitFor Angular() (0) | 2023.09.19 |
---|---|
$http response Set-Cookie에 액세스할 수 없습니다. (0) | 2023.09.19 |
이미지가 div 테두리 안에 머물지 않습니다. (0) | 2023.09.19 |
'appcmd'라는 용어가 cmdlet의 이름으로 인식되지 않습니다. (0) | 2023.09.19 |
잘못된 작업예외: 컨텍스트의 모델에 이 유형이 포함되어 있지 않기 때문에 '역할'에 대한 DbSet을 만들 수 없습니다. (0) | 2023.09.19 |