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
'programing' 카테고리의 다른 글
리액트 훅을 사용하여 Next.js SSR에서 창 크기를 검출하는 방법 (0) | 2023.03.14 |
---|---|
JSON에서 HAL(Hypertext Application Language)을 비활성화하시겠습니까? (0) | 2023.03.14 |
AngularJS : 디렉티브에서의 최소화 문제 (0) | 2023.03.14 |
PHP json_decode()에서 잘못된 json 데이터를 감지하시겠습니까? (0) | 2023.03.14 |
Ajax를 통한 체크아웃 시 Woocommerce 업데이트 배송 방법 (0) | 2023.03.14 |