Как отключить SerializationFeature.FAIL_ON_EMPTY_BEANS в Джексоне для MultipartFile в Spring Boot?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как отключить SerializationFeature.FAIL_ON_EMPTY_BEANS в Джексоне для MultipartFile в Spring Boot?

Сообщение 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);


Подробнее здесь: https://stackoverflow.com/questions/792 ... -multipart
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»