[SPRING] 필자는 FasterXML \ Jackson에서 부울 값을 Int로 serialize / De-serialize 할 수 있습니까?
SPRING필자는 FasterXML \ Jackson에서 부울 값을 Int로 serialize / De-serialize 할 수 있습니까?
부울 값을 "0"및 "1"로 반환하는 서버용 JSON 클라이언트를 작성했습니다. 내 JSON 클라이언트를 실행하려고하면 현재 다음과 같은 예외가 발생합니다.
HttpMessageNotReadableException: Could not read JSON: Can not construct instance of java.lang.Boolean from String value '0': only "true" or "false" recognized
어떻게 FasterXML \ Jackson을 올바르게 구문 분석 할 수 있습니까?
{
"SomeServerType" : {
"ID" : "12345",
"ThisIsABoolean" : "0",
"ThisIsABooleanToo" : "1"
}
}
샘플 Pojo :
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class myPojo
{
@JsonProperty("someServerType")
SomeServerType someServerType;
@JsonProperty("someServerType")
public SomeServerType getSomeServerType() { return someServerType; }
@JsonProperty("someServertype")
public void setSomeServerType(SomeServerType type)
{ someServerType = type; }
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"someServerType"})
public class SomeServerType
{
@JsonProperty("ID")
Integer ID;
@JsonProperty("ThisIsABoolean")
Boolean bool;
@JsonProperty("ThisIsABooleanToo")
Boolean boolToo;
@JsonProperty("ID")
public Integer getID() { return ID; }
@JsonProperty("ID")
public void setID(Integer id)
{ ID = id; }
@JsonProperty("ThisIsABoolean")
public Boolean getThisIsABoolean() { return bool; }
@JsonProperty("ThisIsABoolean")
public void setThisIsABoolean(Boolean b) { bool = b; }
@JsonProperty("ThisIsABooleanToo")
public Boolean getThisIsABooleanToo() { return boolToo; }
@JsonProperty("ThisIsABooleanToo")
public void setThisIsABooleanToo(Boolean b) { boolToo = b; }
}
휴식 클라이언트 라인 참고 1 : 이것은 Spring 3.2를 사용하고 있습니다. 참고 2 : toJSONString () - Jackson을 사용하여 매개 변수 객체를 serialize하는 도우미 메서드입니다. 참고 3 : 결과 개체에서 읽기시 예외가 발생합니다.
DocInfoResponse result = restTemplate.getForObject(docInfoURI.toString()
+ "/?input={input}",
DocInfoResponse.class,
toJSONString(params));
해결법
-
==============================
1.Paulo Pedroso의 대답이 언급되고 언급되었으므로 사용자 정의 JsonSerializer 및 JsonDeserializer를 롤업해야합니다. 일단 생성되면 @JsonSerialize 및 @JsonDeserialize 주석을 속성에 추가해야합니다. 각 클래스에 사용할 클래스를 지정합니다.
Paulo Pedroso의 대답이 언급되고 언급되었으므로 사용자 정의 JsonSerializer 및 JsonDeserializer를 롤업해야합니다. 일단 생성되면 @JsonSerialize 및 @JsonDeserialize 주석을 속성에 추가해야합니다. 각 클래스에 사용할 클래스를 지정합니다.
아래에 작은 (희망적으로 간단한) 예제를 제공했습니다. 시리얼 라이저도 디시리얼라이저도 강력하지 않지만 시작해야합니다.
public static class SimplePojo { @JsonProperty @JsonSerialize(using=NumericBooleanSerializer.class) @JsonDeserialize(using=NumericBooleanDeserializer.class) Boolean bool; } public static class NumericBooleanSerializer extends JsonSerializer<Boolean> { @Override public void serialize(Boolean bool, JsonGenerator generator, SerializerProvider provider) throws IOException, JsonProcessingException { generator.writeString(bool ? "1" : "0"); } } public static class NumericBooleanDeserializer extends JsonDeserializer<Boolean> { @Override public Boolean deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException { return !"0".equals(parser.getText()); } } @Test public void readAndWrite() throws JsonParseException, JsonMappingException, IOException { ObjectMapper mapper = new ObjectMapper(); // read it SimplePojo sp = mapper.readValue("{\"bool\":\"0\"}", SimplePojo.class); assertThat(sp.bool, is(false)); // write it StringWriter writer = new StringWriter(); mapper.writeValue(writer, sp); assertThat(writer.toString(), is("{\"bool\":\"0\"}")); }
-
==============================
2.사용자 정의 디시리얼라이저 대신에 다음과 같은 설정기를 사용할 수도 있습니다.
사용자 정의 디시리얼라이저 대신에 다음과 같은 설정기를 사용할 수도 있습니다.
public void setThisIsABoolean(String str) { if ("0".equals(str)) { bool = false; } else { bool = true; } }
귀하의 방법이 귀하가 내부적으로 사용하는 것과 다른 유형을 요구할 수 있기 때문입니다.
부울과 문자열을 모두 지원해야하는 경우 값이 Object임을 표시하고 얻을 수있는 내용을 확인할 수 있습니다.
getter 메소드 (Boolean) 및 setter (String 또는 Object)에 대해 다른 유형을 가질 수도 있습니다.
from https://stackoverflow.com/questions/34297506/how-can-i-serialize-de-serialize-a-boolean-value-from-fasterxml-jackson-as-an-in by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 테스트 스위트를 실행하는 동안 예외가 발생하는 Ehcache 종료 (0) | 2019.03.25 |
---|---|
[SPRING] Typesafe Config로 지원되는 Spring 환경 (0) | 2019.03.25 |
[SPRING] Spring : get 메소드 호출마다 Bean의 새로운 인스턴스를 생성한다. (0) | 2019.03.25 |
[SPRING] 하나의 스프링 부트 컨테이너에서 여러 웹 앱 실행 (0) | 2019.03.25 |
[SPRING] Spring Pageable 인터페이스에 대한 Swagger 문서 (0) | 2019.03.25 |