2012-09-07 3 views
3

JSON 응답을 POJO 객체로 구문 분석하는 데 잭슨 주석을 사용하고 있습니다. POJO에서 부울 변수를 사용하여 JSON에서 "true"및 "false"값을 매핑했습니다. 하지만 갑자기 JSON에 "TRUE"및 "FALSE"값을 가져오고 이러한 값에 대한 구문 분석이 실패합니다. 누구든지이 변수가 너무 많은 곳에서 논리를 String to Boolean으로 변경하고 싶지 않은 곳에서 사용되므로 부울로 매핑하는 방법을 제안 할 수 있습니까?잭슨 JSON 구문 분석을 사용하여 TRUE 또는 FALSE 부울

답변

5

나는 이것이 당신이 원하는 것인지 확신하지 못합니다. 하지만 작동합니다.

Boolean param = Boolean.parseBoolean((String)yourValue); 

테스트 된 코드는

public class program10 { 

    public static void main(String args[]) { 

     String yourValue = "TRUE"; // This is what you get from json. 
     Boolean param = Boolean.parseBoolean((String)yourValue); 

     if(param == true) 
      System.out.println("Value is true"); 
     else 
      System.out.println("Value is false"); 
     System.out.println(param); 
    } 
} 
+0

OMG - 아름답습니다! – HDave

6

내가 잭슨 파서 1.8.5을 사용하여 비슷한 문제에 직면한다. Java POJO에서 JSON으로 작업했지만 JSON에서 다시 Java POJO로 돌아갔습니다. 부울 변수가

private Boolean isMyVar; 

로 선언 된 경우 자바 POJO에서 은 다음 잭슨

{.., 
"myVar" : false, 
.. 
} 

으로 해당 JSON을 생산하는 (필자는 부울 변수 이름이 여기 잘못 알고 있지만, JAR 타사이다 당신이 그것을 바꿀 수 없다고 말하자.)

나는 Jackson 파서가 부울 값을 다루는 방식에 문제가 있다고 생각한다. JSON을 "myVar": false에서 "isMyVar": false로 변경했으며 JSON에서 Java POJO를 다시 만들면 괜찮습니다.

아직 버그인지 또는 해결 된 사람은 누구입니까?

+0

나는이 문제를 1.9.2에서 아직도 치고있다. –

14

이것은 실제로 문제가 아닙니다. 이것은 기본적으로 BeanUtils의 작동 방식입니다. boolean VARS 들어

잭슨은 JSON에 마샬링 때으로 변수 이름을 기대하고 다시 POJO에 마샬링하는 동일한 유도 이름 set 추가 어떻게 도출하는 세터 이름에서 is을 제거한다.

그래서 boolean isFooTrue;은 JSON에 마샬링 될 때 fooTrue으로 끝나며 비 정렬 화하면 setIsFooTrue();을 호출하려고 시도합니다. 이는 올바르지 않습니다.

private boolean isFoo; 

public boolean isFoo() { 
    return isFoo; 
} 

public void setFoo(boolean isFoo) { 
    this.isFoo= isFoo; 
} 

:

하면 var에 이름을 그냥 foo 것처럼 당신은 아마 boolean isFoo;에 대해 생성 된 코드는 기본적으로 is을 무시 것을 알 수 있습니다, 당신은 IDE를 사용하고 당신은 당신의 게터/세터를 생성 한 경우 두 가지 옵션은 is을 var 이름에서 제거하거나 is을 설정자 이름에 추가하는 것입니다.

관련 문제