Исключение Stripe InvalidDefinitionException при десериализации объекта банковского счета — Java

#java #stripe-payments #deserialization #fasterxml

Вопрос:

Короче говоря, у меня есть объект банковского счета в полоску, который я пытаюсь вернуть клиенту/интерфейсу.

 HashMap<String, Object> response = new HashMap<String, Object>();
HashMap<String, Object> payload = new HashMap<String, Object>();
HashMap<String, Object> retrieveParams = new HashMap<>();

List<String> expandList = new ArrayList<>();

expandList.add("sources");
retrieveParams.put("expand", expandList);

customer = Customer.retrieve("cus_JHnmRG1q0aI3wt", retrieveParams, null);
         
BankAccount bankaccount = (BankAccount) customer.getSources().retrieve(customer.getMetadata().get("source"));
                 

payload.put("payment", bankaccount);   /*** Creates Error***/


response.put("payload", payload);         

return new ResponseEntity<>(response, HttpStatus.ACCEPTED);         
 

Как я могу отправить этот объект bankaccount обратно на интерфейс, возможно, в виде хэш-карты или другого объекта в формате JSON.

Я продолжаю получать следующую ошибку:

 Type definition error: [simple type, class com.stripe.net.StripeResponse]; nested exception is
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class 
com.stripe.net.StripeResponse and no properties discovered to create BeanSerializer (to avoid exception,
disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.HashMap["payload"]->
java.util.HashMap["payment"]->com.stripe.model.BankAccount["lastResponse"])]
 

Ответ №1:

Я бы предложил вместо этого использовать идентификатор, но должна быть возможность получить объект JSON из любого объекта Stripe (источника), который затем вы можете сериализовать/проанализировать по своему усмотрению.

Комментарии:

1. Использовать идентификатор недостаточно, так как это страница способов оплаты, на которой отображаются все способы оплаты, настроенные в данный момент в учетной записи, поэтому отображается дополнительная информация, например last4 и имя банкноты. Есть аргумент, чтобы просто отправить те конкретные поля, которые я буду отправлять вместо полного объекта в какой-то момент. Тем не менее, я смог с этим поработать. — Смотри ответ.

2. Конечно, это справедливо, если вы хотите, например, отобразить некоторую часть учетной записи, которая будет использоваться в вашем пользовательском интерфейсе. Я все еще думаю, что было бы лучше извлечь только те части, которые вам нужны, а не отправлять все объекты целиком.

Ответ №2:

Я смог решить эту проблему, просто добавив toJson() как таковое:

payload.put("payment", bankaccount.toJson());

Недостатком этого является дополнительное JSON.parse() требование к интерфейсу