Saya mencoba mengirim permintaan posting formData (menggunakan aksioma) ke backend saya (springboot) tetapi saya tidak yakin cara yang tepat untuk melakukannya. Rencana saya adalah meneruskan data melalui pengontrol ke layanan yang akan menggunakannya.

Panggilan aksio -

startStreamLocation() {
  const location = new FormData();
  location.set("accuracy", this.accuracy)
  location.set("lat", this.lat)
  location.set("lng", this.lng)
  location.set("timeStamp", this.timeStamp)

  axios.post("http://localhost:8080/api/v1/location/request-location", location,
      {headers: {'Content-Type': 'application/json'}})
},

Pengontrol -

@PostMapping(value = "request-location")
public ResponseEntity<?> requestLocation() {

    connectionRequestService.addDataToStream();
    return new ResponseEntity<Authenticator.Success>(HttpStatus.OK);
}

Layanan -

   public void addDataToStream() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
        AmazonKinesis kinesisClient = AmazonKinesisClient.builder()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .withRegion(awsRegion)
                .build();

    PutRecordsRequest putRecordsRequest  = new PutRecordsRequest();
    putRecordsRequest.setStreamName("location-stream");
    List <PutRecordsRequestEntry> putRecordsRequestEntryList  = new ArrayList<>();
        PutRecordsRequestEntry putRecordsRequestEntry  = new PutRecordsRequestEntry();
        putRecordsRequestEntry.setData(ByteBuffer.wrap(( INJECT DATA HERE ).getBytes()));
        putRecordsRequestEntry.setPartitionKey(String.format("partitionKey-%d"));
        putRecordsRequestEntryList.add(putRecordsRequestEntry);

    putRecordsRequest.setRecords(putRecordsRequestEntryList);
    PutRecordsResult putRecordsResult  = kinesisClient.putRecords(putRecordsRequest);
    System.out.println("\nData sent successfully... \n" + putRecordsResult);
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException exception) {
        throw new RuntimeException(exception);
    }
}
0
CodeJ 12 Mei 2021, 07:11

1 menjawab

Jawaban Terbaik

Karena Anda ingin mengirim data formulir ke server, Anda perlu mengubah header Content-Type di panggilan Axios ke multipart/form-data. Ini membantu server memahami jenis sumber daya yang dikirim oleh klien.

Di ujung server, Anda ingin membaca data formulir ini. Saya dapat memikirkan dua cara berikut untuk melakukan itu

  1. Gunakan @RequestParam untuk membaca kunci formulir individual. Misalnya, jika data formulir saya berisi kunci bernama Foo, saya akan membacanya di akhir server seperti ini
    @PostMapping(value = "/form-data")
    public void readFormData( @RequestParam(value = "Foo") String foo )
  1. Gunakan @RequestBody untuk memetakan data formulir ke MultiValueMap yang kemudian dapat dibaca seperti peta biasa. Berikut cuplikan kode untuk hal yang sama
    @PostMapping(value = "/form-data")
    public void readFormData( @RequestBody MultiValueMap<String,String> formData )
1
susheem_k 12 Mei 2021, 05:06