Я работаю над проектом Spring Boot, где мне нужно отправить составной запрос POST. Однако я столкнулся с ошибкой, связанной с сериализацией Джексона:
Не найден сериализатор для класса java.io.ByteArrayInputStream и не обнаружено свойств для создания BeanSerializer (во избежание исключение, отключите SerializationFeature.FAIL_ON_EMPTY_BEANS)
Я не хочу использовать кодировку Base64 для MultipartFile. Вместо этого я хотел бы отключить функцию SerializationFeature.FAIL_ON_EMPTY_BEANS в Джексоне. Вот соответствующая часть моего кода:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.riu.corporate.hr.employeepayrollaggregator.application.exception.HttpRequestException;
import com.riu.corporate.hr.employeepayrollaggregator.domain.port.service.http.post.HttpPostRequestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@Service
public class HttpPostRequestServiceImpl implements HttpPostRequestService {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private RestTemplate restTemplate;
@Autowired
private TokenServiceImpl tokenRequest;
@Override
public T sendMultipartPostRequest(String urlString, MultiValueMap requestData, Class responseType) throws HttpRequestException {
try {
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
String bearerToken = tokenRequest.getMachineToMachineToken();
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + bearerToken);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap multipartRequest = requestData;
HttpEntity requestEntity = new HttpEntity(multipartRequest, headers);
// Log the cURL command
StringBuilder curlCommand = new StringBuilder("curl -X POST ");
curlCommand.append("\"").append(urlString).append("\" ");
headers.forEach((key, value) -> curlCommand.append("-H \"").append(key).append(": ").append(String.join(", ", value)).append("\" "));
multipartRequest.forEach((key, value) -> {
for (MultipartFile file : value) {
curlCommand.append("-F \"").append(key).append("=@").append(file.getOriginalFilename()).append("\" ");
}
});
log.info("cURL command: {}", curlCommand.toString());
ResponseEntity response = restTemplate.postForEntity(urlString, requestEntity, String.class);
if (response.getStatusCode() != HttpStatus.OK) {
throw new HttpRequestException("Failed to call API: " + response.getStatusCode());
}
return objectMapper.readValue(response.getBody(), responseType);
} catch (Exception e) {
log.error("Failed to call API: {}", e.getMessage());
throw new HttpRequestException("Failed to call API", e);
}
}
}
Несмотря на отключение функции SerializationFeature.FAIL_ON_EMPTY_BEANS, я по-прежнему сталкиваюсь с той же ошибкой. Как решить эту проблему без использования кодировки Base64 для MultipartFile?
Я пытаюсь использовать
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
Подробнее здесь: https://stackoverflow.com/questions/792 ... -multipart
Как отключить SerializationFeature.FAIL_ON_EMPTY_BEANS в Джексоне для MultipartFile в Spring Boot? ⇐ JAVA
Программисты JAVA общаются здесь
1732623755
Anonymous
Я работаю над проектом Spring Boot, где мне нужно отправить составной запрос POST. Однако я столкнулся с ошибкой, связанной с сериализацией Джексона:
Не найден сериализатор для класса java.io.ByteArrayInputStream и не обнаружено свойств для создания BeanSerializer (во избежание исключение, отключите SerializationFeature.FAIL_ON_EMPTY_BEANS)
Я не хочу использовать кодировку Base64 для MultipartFile. Вместо этого я хотел бы отключить функцию SerializationFeature.FAIL_ON_EMPTY_BEANS в Джексоне. Вот соответствующая часть моего кода:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.riu.corporate.hr.employeepayrollaggregator.application.exception.HttpRequestException;
import com.riu.corporate.hr.employeepayrollaggregator.domain.port.service.http.post.HttpPostRequestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@Service
public class HttpPostRequestServiceImpl implements HttpPostRequestService {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private RestTemplate restTemplate;
@Autowired
private TokenServiceImpl tokenRequest;
@Override
public T sendMultipartPostRequest(String urlString, MultiValueMap requestData, Class responseType) throws HttpRequestException {
try {
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
String bearerToken = tokenRequest.getMachineToMachineToken();
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + bearerToken);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap multipartRequest = requestData;
HttpEntity requestEntity = new HttpEntity(multipartRequest, headers);
// Log the cURL command
StringBuilder curlCommand = new StringBuilder("curl -X POST ");
curlCommand.append("\"").append(urlString).append("\" ");
headers.forEach((key, value) -> curlCommand.append("-H \"").append(key).append(": ").append(String.join(", ", value)).append("\" "));
multipartRequest.forEach((key, value) -> {
for (MultipartFile file : value) {
curlCommand.append("-F \"").append(key).append("=@").append(file.getOriginalFilename()).append("\" ");
}
});
log.info("cURL command: {}", curlCommand.toString());
ResponseEntity response = restTemplate.postForEntity(urlString, requestEntity, String.class);
if (response.getStatusCode() != HttpStatus.OK) {
throw new HttpRequestException("Failed to call API: " + response.getStatusCode());
}
return objectMapper.readValue(response.getBody(), responseType);
} catch (Exception e) {
log.error("Failed to call API: {}", e.getMessage());
throw new HttpRequestException("Failed to call API", e);
}
}
}
Несмотря на отключение функции SerializationFeature.FAIL_ON_EMPTY_BEANS, я по-прежнему сталкиваюсь с той же ошибкой. Как решить эту проблему без использования кодировки Base64 для MultipartFile?
Я пытаюсь использовать
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
Подробнее здесь: [url]https://stackoverflow.com/questions/79226704/how-to-disable-serializationfeature-fail-on-empty-beans-in-jackson-for-multipart[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия