2013-08-10 3 views
2

문자열 변수 값을 따옴표없이 일련 번호로 serialize하도록 Annotation이나 다른 방법이 있습니까? serializer는 한 필드의 값을 따옴표없이 serialize해야합니다.인용 부호가없는 Jackson 필드 값

{"name": "nameValue", "click" : function (e){console.log("message");}} 

대신

{"name": "nameValue", "click" : "function (e){console.log("message");}"} 

이없는, 그래서 만약 외부 자바 스크립트 라이브러리, 데이터를 필요로하는 방법입니다

나는 비슷한의 반환을 찾고 있어요 방법은 수동으로 개체 매퍼 JSON 변환 한 후 문자열을 변경해야합니다.

답변

6

다른 사람들도 지적했듯이, 큰 따옴표는 JSON에서는 선택 사항이 아니지만 필수 항목입니다.

그런 의미에서 원하는대로하려면 JsonRawValue 특수 효과를 사용할 수 있습니다.

public class POJO { 
    public String name; 
    @JsonRawValue 
    public String click; 
} 
2

그건 not valid JSON입니다. 따라서 가질 수 없습니다. JSON은 값 전송 형식이므로 함수를 전송할 수 없습니다.

JSON에서 함수를 반환해야 할 경우 결과를 javascript로 처리 할 수 ​​있습니다.

+0

유효한 JSON을 알고 있습니다. 하지만 그것은 요구 사항입니다. – ex0b1t

+0

누군가가 나쁜 요구 사항을 고안했습니다 :) 당신은 자바 스크립트로 결과를 후 처리 할 수 ​​있습니까? – Bozho

+0

그것은 나쁜 생각이 아닙니다. – ex0b1t

5

글쎄, 기술적으로 할 수있어. 결과가 유효한 JSON을하지 않을 것이지만, 그것은 잭슨 여전히 가능 :

동의 완벽 해요
class Dto { 
    @JsonProperty("name") 
    String foo = "nameValue"; 
    @JsonProperty("click") 
    JsEntry entry = new JsEntry("function (e){console.log(\"message\");}"); 
} 

class JsEntry implements JsonSerializableWithType { 
    private String value; 

    JsEntry(String value) { 
     this.value = value; 
    } 

    @Override 
    public void serializeWithType(JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException { 
     this.serialize(jgen, provider); 
    } 

    @Override 
    public void serialize(JsonGenerator jgen, SerializerProvider provider) throws IOException { 
     jgen.writeRawValue(value); 
    } 
} 

은, 그러나,이 요구 사항은 표준 위반이 발생하고 개정되어야한다.

+0

나의 영웅, 감사는 매력처럼 일했습니다! – ex0b1t

관련 문제