Задать вопрос
@Neonoviiwolf
Flutter developer

Spring mvc — передача файлов и json?

Доброго
Ничего не понимаю в Spring, просто нужен простенький сервер для андроид приложения

Сначала накопипастил с инета и сервер (на TomCat) стал отправлять json, но мне нужно ещё отправлять image по запросу, иконку и большую картинку
Долго искал что и где прописать, мигия сприна сильная)
по порядку
Config:
@Configuration
@EnableWebMvc
@ComponentScan ("app")
public class WebConfig implements WebMvcConfigurer {
/** если этот раскоментить, то норм получаю Json ответ, но картинка приходит как на фото ниже, наверно это byte[], но не уверен
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));

        converters.add(converter);
    }
*/
/**  если тут, то в браузере сразу вижу фото, но json HTTP Status 500
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(byteArrayHttpMessageConverter());
    }
*/
    @Bean
    public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
        ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
        arrayHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());
        return arrayHttpMessageConverter;
    }

    private List<MediaType> getSupportedMediaTypes() {
        List<MediaType> list = new ArrayList<>();
        list.add(MediaType.IMAGE_JPEG);
        list.add(MediaType.IMAGE_PNG);
        list.add(MediaType.APPLICATION_OCTET_STREAM);
        return list;
    }
..... тут куча @Override которые я не трогал

Эти configureMessageConverters можно как объединить или что с ними сделать, чтобы всё работало, или если это byte[], смогу ли я его обратно конвертнуть на стороне клиента?
5a94882f91381336988879.jpeg

Второе
@RestController
package app.controller;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletContext;
import java.io.IOException;
import java.io.InputStream;

@RestController
public class ImageReturnController {

    @Autowired
    private ServletContext servletContext;

    @RequestMapping(value = "/image_array", method = RequestMethod.GET)
    public @ResponseBody byte[] getImageAsByteArray() throws IOException {
        InputStream in = servletContext.getResourceAsStream("/WEB-INF/3.jpg");
        return IOUtils.toByteArray(in);
    }
}

у меня тут возвращается строго заданная картинка, а как переписать, чтобы я отправлял "name".jpg который мне нужен? Т.е. приходит name = 100500 и я получал "/WEB-INF/100500.jpg" если существет

И последнее
InputStream in = servletContext.getResourceAsStream("/WEB-INF/3.jpg"); тут я задаю адрес, но вот я с начало хотел D:\Android\testDB - работать не стал, как такое можно ему передать?
  • Вопрос задан
  • 1451 просмотр
Подписаться 1 Средний 3 комментария
Решения вопроса 1
1)
@RequestMapping(value = "/image_array/{fileName}", method = RequestMethod.GET)
    public @ResponseBody byte[] getImageAsByteArray(@RequestParam("fileName") String fileName) throws IOException {
        InputStream in = servletContext.getResourceAsStream("/WEB-INF/"+fileName);
        return IOUtils.toByteArray(in);
    }


2) Читать что такое classpath до полного просветления.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Djaler
@Djaler
Сеньор-помидор
Я бы на вашем месте посмотрел в сторону Spring Boot. В нём такие мелочи уже сконфигурированы так, чтобы покрыть стандартные потребности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы