Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
Наконец, я решил проблему с помощью библиотеки apache commons . Сначала я использовал следующую зависимость.
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.6</version>
<type>jar</type>
</dependency>
Техника, которую я использовал ранее, была неправильной для меня (Не уверен для других) . Ниже приведено решение, как я решил свою проблему.
Решение:
Я добавил значение байтового массива ранее в JSONObject и сохранил его как String. Когда я попытался перейти из JSONObject в массив байтов, он вернул String, а не мой исходный массив байтов. И не получил исходный массив байтов, даже я использую следующее:
byte[] bArray=jSONObject.getString(key).toString().getBytes();
Теперь,
Сначала я закодировал свой байтовый массив в строку и сохранил JSONObject для этого закодированная строка. См. Ниже:
byte[] bArray=(myByteArray);
//Following is the code that encoded my byte array and kept on String
String encodedString = org.apache.commons.codec.binary.Base64.encodeBase64String(bArray);
jSONObject.put(JSONConstant.BYTE_ARRAY_LIST , encodedString);
И код, в который я возвращаю свой исходный массив байтов:
String getBackEncodedString = jSONObject.getString(JSONConstant.BYTE_ARRAY_LIST);
//Following code decodes to encodedString and returns original byte array
byte[] backByte = org.apache.commons.codec.binary.Base64.decodeBase64(getBackEncodedString);
//Creating pdf file of this backByte
FileCreator.createPDF(backByte, "fileAfterJSONObject.pdf");
Вот и все.
Для примера тестов (используется com.fasterxml.jackson):
byte[] bytes = "pdf_report".getBytes("UTF-8");
Mockito.when(reportService.createPackageInvoice(Mockito.any(String.class))).thenReturn(bytes);
String jStr = new ObjectMapper().writeValueAsString(bytes).replaceAll("\\\"", ""); // return string with a '\"' escape...
mockMvc.perform(get("/api/getReport").param("someparam", "222"))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON_UTF8))
...
.andExpect(jsonPath("$.content", is(jStr)))
;
Это может помочь тем, кто использует Java 8. Используйте java.util.Base64
.
Кодирование байтового массива в String:
String encodedString = java.util.Base64.getEncoder().encodeToString(byteArray);
JSONObject.put("encodedString",encodedString);
Декодировать массив байтов из String:
String encodedString = (String) JSONObject.get("encodedString");
byte[] byteArray = java.util.Base64.getDecoder().decode(encodedString);
При вставке байтового массива в JSONObject вызывается метод toString ().
public static void main(String... args) throws JSONException{
JSONObject o = new JSONObject();
byte[] b = "hello".getBytes();
o.put("A", b);
System.out.println(o.get("A"));
}
Пример вывода:
[B@1bd8c6e
, поэтому вам нужно сохранить его в способ, которым вы можете разобрать String в исходный тип данных.