I would like to develop restful service and it will return JSON String to client. Now there is byte[] attribute in my object.
I use ObjectMapper to translate this object to json and response to client. But I find the byte[] is wrong if I use String.getBytes() to translate the received string. Following is example.
Pojo class
public class Pojo {
private byte[] pic;
private String id;
//getter, setter,...etc
}
Prepare data: use image to get byte array
InputStream inputStream = FileUtils.openInputStream(new File("config/images.jpg"));
byte[] pic = IOUtils.toByteArray(inputStream);
Pojo pojo = new Pojo();
pojo.setId("1");
pojo.setPic(pic);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(pojo);
--Situation 1: use readvalue to object => the image2.jpg is correct
Pojo tranPojo = mapper.readValue(json, Pojo.class);
byte[] tranPicPojo = tranPojo.getPic();
InputStream isPojo = new ByteArrayInputStream(tranPicPojo);
File tranFilePojo = new File("config/images2.png");
FileUtils.copyInputStreamToFile(isPojo, tranFilePojo);
--Situation 2: use readvalue to Map and get String => the image3.jpg is broken
Map<String, String> map = mapper.readValue(json, Map.class);
byte[] tranString = map.get("pic").getBytes();
InputStream isString = new ByteArrayInputStream(tranString);
File tranFileString = new File("config/images3.png");
FileUtils.copyInputStreamToFile(isString, tranFileString);
If I have to use situation 2 to translate the JSON String, how can I do it? Because clients can not get the Pojo.class, so clients only can translate the JSON string themselves.
Thanks a lot!