简体   繁体   English

在 Spring 启动 API 收到一个 urlenconded

[英]Receive an urlenconded in Spring Boot API

I need to receive a request from a webhook from a third party API.我需要接收来自第三方 API 的 webhook 的请求。

Post content is an urlenconded in following format:帖子内容是以下格式的 urlenconded:

event=invoice.created&data%5Bid%5D=value1&data%5Bstatus%5D=pending&data%5Baccount_id%5D=value2 event=invoice.created&data%5Bid%5D=value1&data%5Bstatus%5D=pending&data%5Baccount_id%5D=value2

The problem is serialize this params data[id] with these square brackets.问题是用这些方括号序列化这个参数数据[id]。 I'm getting an error in spring boot:我在 spring 启动时遇到错误:

Invalid property 'data[account_id]' of bean class [br.com.bettha.domain.dto.IuguWebhookDto]: Property referenced in indexed property path 'data[account_id]' is neither an array nor a List nor a Map; Invalid property 'data[account_id]' of bean class [br.com.bettha.domain.dto.IuguWebhookDto]: Property referenced in indexed property path 'data[account_id]' is neither an array nor a List nor a Map; returned value was [IuguDataDto(id=null, account_id=null, status=null, subscription_id=null)]返回值为 [IuguDataDto(id=null, account_id=null, status=null, subscription_id=null)]

My controller:我的 controller:

@PostMapping(value = "/subscription-invoice", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
@ApiOperation(
        value="Create a subscription invoice from Iugu's webhook",
        response= Invoice.class,
        notes="This Operation creates a subscription invoice from Iugu's webhook")
@PreAuthorize("#oauth2.hasScope('read')")
public ResponseEntity<Invoice> createSubscriptionInvoice(IuguWebhookDto iuguWebhookDto) {
    try {
        Invoice invoice = paymentService.createSubscriptionInvoiceFromIugusWebhook(iuguWebhookDto);
        return new ResponseEntity<>(invoice, HttpStatus.CREATED);
    } catch (EntityNotFoundException e) {
        throw new ResponseStatusException(HttpStatus.NOT_FOUND, e.getMessage(), e);
    } catch (Exception e) {
        throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e);
    }
}

IuguWebhookDto.java: IuguWebhookDto.java:

@Getter
@Setter
@NoArgsConstructor
@ToString
public class IuguWebhookDto implements Serializable {
    private static final long serialVersionUID = -5557936429069206933L;

    private String event;
    
    private IuguDataDto data;

IuguDataDto.java: IuguDataDto.java:

@Getter
@Setter
@NoArgsConstructor
@ToString
public class IuguDataDto implements Serializable {
    private static final long serialVersionUID = -5557936429069206933L;

    private String id;

    private String account_id;

    private String status;

    private String subscription_id;

How can I receive these request params as an object in Spring Boot?如何在 Spring 引导中将这些请求参数作为 object 接收?

I have the same problem using Iugu Webhooks API.我在使用 Iugu Webhooks API 时遇到了同样的问题。 To solve, i just stringify the raw data sent by Iugu, remove the unwanted characters, and then parse again the object to get the variables that i want.为了解决这个问题,我只是对 Iugu 发送的原始数据进行字符串化,删除不需要的字符,然后再次解析 object 以获得我想要的变量。

    var dataReceived = JSON.stringify(req.body).replace('data[id]','id').replace('data[status]','status').replace('data[account_id]','account_id');

  var finalData = JSON.parse(dataReceived);

  return res.status(200).send(finalData.id);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM