Ответ 1
Получить байты строки:
obj.toString().getBytes(theCharset);
У меня проблема, когда я хочу отправлять данные с использованием формата байтов в UDP-протоколе, проблема в том, что когда я пытаюсь создать данные с помощью типа json-объекта, я не могу получить формат байтов моих данных, это мой пример код:
JSONObject obj = new JSONObject();
obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true));
obj.put("nickname",null);
sendData = obj.getBytes(); //this is error because not have methos getBytes();
Я знаю свою проблему, но я не могу найти, как преобразовать json-объект в байт, любое предложение?
Получить байты строки:
obj.toString().getBytes(theCharset);
Предполагая, что упоминаемый JSONObject относится к this, вы можете получить байты, как показано ниже
sendData = obj.toString().getBytes("utf-8");
Чтобы избежать ненужного преобразования из String
в byte[]
, который применяет кодировку на основе предоставленной кодировки, я предпочитаю использовать JsonWriter
непосредственно с ByteArrayOutputStream
например (подтипы JsonValue
используют JsonWriter
с StringWriter
):
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Json.createWriter(stream).write(obj);
byte[] sendData = stream.toByteArray()
System.out.println("Bytes array: " + sendData);
System.out.println("As a string: " + stream.toString());
Кроме того, можно даже разрешить печать следующим образом:
Json.createWriterFactory(
Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true))
.createWriter(stream)
.write(obj);
Единственное печальное заключается в том, что это не однострочный. Вам понадобится по крайней мере 3 (учитывая, что вы опускаете вызов JsonWriter.close()
, который не нужен в этом контексте).
Использовать класс утилиты из ObjectMapper
проекта jackson-databind
, т.е. objectMapper.writeValueAsBytes(dto)
возвращает byte[]
@Autowired
private ObjectMapper objectMapper;
ContractFilterDTO filter = new ContractFilterDTO();
mockMvc.perform(post("/api/customer/{ico}", "44077866")
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.content(objectMapper.writeValueAsBytes(filter)))...
Зависимость от Maven:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8.1</version>
</dependency>