Я создаю приложение Spring, в котором он вызывает информацию из API-интерфейса AWS и преобразует ее в JSON, чтобы приложение внешнего интерфейса могло переваривать и отображать. В настоящее время я пытаюсь вернуть список всех текущих сегментов S3 для учетной записи, но столкнулся с проблемой, когда ответ JSON:
статус ": 500,
«ошибка»: «Внутренняя ошибка сервера»,
«message»: «Ошибка определения типа: [простой тип, класс software.amazon.awssdk.services.s3.model.Bucket]; вложенное исключение - com.fasterxml.jackson.databind.exc.InvalidDefinitionException: не найден сериализатор для программного обеспечения класса .amazon.awssdk.services.s3.model.Bucket и не обнаружены свойства для создания BeanSerializer (во избежание исключения отключите SerializationFeature.FAIL_ON_EMPTY_BEANS) (через цепочку ссылок: com.landsend.clouddashboard.data.Class.S3 [\ "bucketList \ "] -java.util.Collections $ UnmodifiableRandomAccessList [0])",
"путь": "/ api / s3 / buckets"
Я создал класс с именем S3, который имеет частные переменные. Одним из них является тип List с именем bucketList. Этот класс имеет типичные методы получения и установки, связанные с этими переменными.
Я также попытался добавить это в файл application.properties:
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
Это привело к исчезновению ошибки, но я получил пустой файл JSON.
Класс контроллера
@RestController
@RequestMapping(value="/api")
public class S3Controller {
@Autowired
private S3Service s3Service;
@RequestMapping(method= RequestMethod.GET, value="/s3/buckets")
public S3 ListBuckets(){
return s3Service.listBucket();
}
}
Класс обслуживания
@Service
public class S3Service {
private S3Access s3Access;
@Autowired
public S3Service(S3Access s3Access){
this.s3Access = s3Access;
}
public S3 listBucket(){
//Any Additional business logic would go here
return s3Access.listBucket();
}
}
Класс доступа
@Repository
public class S3Access implements S3Repository {
@Autowired
private S3 s3Instance;
private Region region = Region.US_EAST_1;
private S3Client s3Client =
S3Client.builder().region(region).build();
@Override
public S3 listBucket() {
ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build();
ListBucketsResponse listBucketsResponse = s3Client.listBuckets(listBucketsRequest);
s3Instance.setBucketList(listBucketsResponse.buckets());
return s3Instance;
}
}
Класс конструктора S3
@Component
public class S3 {
private String fileName;
private String bucketName;
private int bucketSize;
private List<Bucket> bucketList;
public List<Bucket> getBucketList() {
return bucketList;
}
public void setBucketList(List<Bucket> bucketList) {
this.bucketList = bucketList;
}
}
Любые мысли о том, почему это не работает, приветствуются.