programing

Jackson을 사용하여 json으로 바이트 배열 보내기

topblog 2023. 3. 14. 21:21
반응형

Jackson을 사용하여 json으로 바이트 배열 보내기

두 개의 필드 mimtype과 값으로 JSON을 형성하고 싶습니다.value 필드에는 바이트 배열을 값으로 사용해야 합니다.

{

  "mimetype":"text/plain",

  "value":"dasdsaAssadsadasd212sadasd"//this value is of type byte[]

}

어떻게 하면 이 작업을 수행할 수 있습니까?

현재 사용하고 있습니다.toString()바이트 배열을 String으로 변환하고 JSON을 형성하는 메서드입니다.

JSON 파싱에 Jackson을 사용하는 경우 자동으로 변환됩니다.byte[]데이터 바인딩을 통해 Base64로 인코딩된 문자열로 송수신합니다.

또는 낮은 수준의 액세스를 원하는 경우JsonParser그리고.JsonGenerator에는 JSON 토큰 스트림 수준에서 동일한 작업을 수행하기 위한 바이너리 액세스 방식(writeBinary, readBinary)이 있습니다.

자동 접근의 경우 다음과 같은 POJO를 고려하십시오.

public class Message {
  public String mimetype;
  public byte[] value;
}

JSON을 작성하려면 다음 작업을 수행합니다.

Message msg = ...;
String jsonStr = new ObjectMapper().writeValueAsString(msg);

또는, 보다 일반적으로 다음과 같이 기술합니다.

OutputStream out = ...;
new ObjectMapper().writeValue(out, msg);

다음과 같이 독자적인 CustomSerializer를 작성할 수 있습니다.

public class ByteArraySerializer extends JsonSerializer<byte[]> {

@Override
public void serialize(byte[] bytes, JsonGenerator jgen,
        SerializerProvider provider) throws IOException,
        JsonProcessingException {
    jgen.writeStartArray();

    for (byte b : bytes) {
        jgen.writeNumber(unsignedToBytes(b));
    }

    jgen.writeEndArray();

}

private static int unsignedToBytes(byte b) {
    return b & 0xFF;
  }

}

이것은 Base64 문자열 대신 부호 없는 바이트 배열 표현을 반환합니다.

POJO와 함께 사용하는 방법:

public class YourPojo {

    @JsonProperty("mimetype")
    private String mimetype;
    @JsonProperty("value")
    private byte[] value;



    public String getMimetype() { return this.mimetype; }
    public void setMimetype(String mimetype) { this.mimetype = mimetype; }

    @JsonSerialize(using= com.example.yourapp.ByteArraySerializer.class)
    public byte[] getValue() { return this.value; }
    public void setValue(String value) { this.value = value; }


}

다음으로 출력 예를 제시하겠습니다.

{
    "mimetype": "text/plain",
    "value": [
        81,
        109,
        70,
        122,
        90,
        83,
        65,
        50,
        78,
        67,
        66,
        84,
        100,
        72,
        74,
        108,
        89,
        87,
        48,
        61
    ]
}

추신: 이 시리얼라이저는 StackOverflow에서 찾은 답변의 조합입니다.

이진 데이터를 문자열로 변환하는 Base64를 사용할 수 있습니다.대부분의 프로그래밍 언어에는 base64 인코딩 및 디코딩이 구현되어 있습니다.브라우저에서 디코딩/엔코드를 하려면 다음 질문을 참조하십시오.

언급URL : https://stackoverflow.com/questions/11546917/sending-a-byte-array-in-json-using-jackson

반응형