Spring MVC @GetMapping производит json и превосходит - PullRequest
0 голосов
/ 14 января 2020

У меня проблема весной MVC @GetMapping аннотация с продукцией. Справочная информация: Я разработал API, который всегда отвечает в следующей структуре

public class ApiResponse<T> {
    private T data;
    private Map<String, String> extraInfo;

    ... constructor / getter / setter
}

У меня есть клиент Angular 8, который использует этот ответ API.


Я собираюсь разработать метод для отправки Excel байта [] с использованием этой структуры. (по какой-то причине я не могу использовать HttpServletResponse, как и другие учебники, найденные в Google)

Во-первых, при отправке данных с простым объектом я могу использовать

@GetMapping(value="/getObject", produces="application/json")
public ApiResponse<MyObject> sendObject(){
    Map<String, String> extraInfo = new HashMap<>();
    extraInfo.put("some", "thing");

    return new ApiResponse(myObject, extraInfo);
}

Мой Angular клиент может прочитайте этот формат правильно.

Кроме того, при отправке одного байта Excel [] я могу использовать

@GetMapping(value="/getExcel", produces="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
public byte[] sendExcelByteArray(){
    return myExcelByteArray;
}

Мой Angular клиент может преобразовать байт [] в файл Excel правильно (файл можно открыть нормально)

Но у меня проблема. Когда я собираюсь использовать

@GetMapping(value="/getObject", produces="application/json")
public ApiResponse<byte[]> sendObject(){
    Map<String, String> extraInfo = new HashMap<>();
    extraInfo.put("some", "thing");

    return new ApiResponse(myExcelByteArray, extraInfo);
}

в "application / json" или "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet"

Мой Angular клиент не может читать данные Excel (там указано, что файл поврежден).

Существуют ли какие-либо подходы, я могу использовать ApiResponse, чтобы "обернуть" мой байт Excel [], который Angular клиент может конвертировать нормально?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...