programing

true 또는 false 대신 1 또는 0을 기준으로 Spring @RequestParam 매핑 부울

instargram 2023. 9. 19. 20:45
반응형

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인 부울 플래그입니다.enter image description here

@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

반응형