Доброго
Ничего не понимаю в 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[], смогу ли я его обратно конвертнуть на стороне клиента?
Второе
@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 - работать не стал, как такое можно ему передать?