All Products
Search
Document Center

Function Compute:Penangan Java

Last Updated:Mar 01, 2026

Penangan memproses permintaan masuk dalam fungsi Function Compute (FC) Anda. Saat fungsi dipanggil, FC mengarahkan permintaan ke penangan yang ditentukan dalam konfigurasi fungsi tersebut.

Catatan

Untuk menangani permintaan HTTP melalui pemicu HTTP atau nama domain kustom, lihat Use an HTTP trigger to invoke a function.

Format Handler

Konfigurasikan parameter Handler di Function Compute console menggunakan format berikut:

[Nama paket].[Nama kelas]::[Nama metode]

Contohnya, jika paket Anda adalah example, kelas Anda adalah HelloFC, dan metode Anda adalah handleRequest:

example.HelloFC::handleRequest

Nama paket dan kelas dapat dikustomisasi, tetapi harus sesuai dengan nilai Handler dalam konfigurasi fungsi. Lihat Create an event function.

Antarmuka penangan

Penangan Java harus mengimplementasikan antarmuka dari pustaka fc-java-core:

AntarmukaInput/OutputGunakan saat
StreamRequestHandlerInputStream / OutputStreamMemproses aliran byte mentah atau data yang tidak dapat dipetakan ke POJO
PojoRequestHandler<I, O>Tipe POJO kustomBekerja dengan data JSON terstruktur yang dipetakan ke objek Java

Dependensi Maven

Tambahkan fc-java-core ke file pom.xml Anda:

<dependency>
    <groupId>com.aliyun.fc.runtime</groupId>
    <artifactId>fc-java-core</artifactId>
    <version>1.4.1</version>
</dependency>

Periksa Maven repository untuk versi terbaru.

Sebelum membuat fungsi, kemas kode Anda beserta dependensi fc-java-core ke dalam file JAR. Lihat Compile and deploy code packages.

StreamRequestHandler

StreamRequestHandler membaca input dari InputStream dan menulis output ke OutputStream.

package example;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class HelloFC implements StreamRequestHandler {

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        outputStream.write(new String("hello world").getBytes());
    }
}
  • inputStream: Berisi data event yang diteruskan saat fungsi dipanggil.

  • outputStream: Menerima data hasil kembalian fungsi.

  • context: Menyediakan informasi waktu proses seperti ID permintaan dan pasangan Kunci Akses sementara. Tipe: com.aliyun.fc.runtime.Context. Lihat Context.

PojoRequestHandler

PojoRequestHandler<I, O> menggunakan tipe generik untuk input dan output. Kedua tipe tersebut harus berupa Plain Old Java Objects (POJO) yang mendukung serialisasi JSON.

Kelas penangan

// HelloFC.java
package example;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;

public class HelloFC implements PojoRequestHandler<SimpleRequest, SimpleResponse> {

    @Override
    public SimpleResponse handleRequest(SimpleRequest request, Context context) {
        String message = "Hello, " + request.getFirstName() + " " + request.getLastName();
        return new SimpleResponse(message);
    }
}

Kelas permintaan dan tanggapan

// SimpleRequest.java
package example;

public class SimpleRequest {
    String firstName;
    String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public SimpleRequest() {}
    public SimpleRequest(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
// SimpleResponse.java
package example;

public class SimpleResponse {
    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public SimpleResponse() {}
    public SimpleResponse(String message) {
        this.message = message;
    }
}

Contoh event input

{
  "firstName": "FC",
  "lastName": "aliyun"
}

Contoh: Memanggil fungsi dengan pemicu HTTP

Contoh ini menunjukkan penangan yang memproses permintaan pemicu HTTP dan mengembalikan respons HTTP.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Kode contoh

Penangan mengimplementasikan PojoRequestHandler dengan HTTPTriggerEvent dan HTTPTriggerResponse sebagai tipe input dan output. Untuk format permintaan dan respons pemicu HTTP, lihat Use an HTTP trigger to invoke a function.

App.java – Kelas titik masuk

App.java

package example;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;

public class App implements PojoRequestHandler<HTTPTriggerEvent, HTTPTriggerResponse> {

    @Override
    public HTTPTriggerResponse handleRequest(HTTPTriggerEvent request, Context context) {
        context.getLogger().info("Receive HTTP Trigger request: " + request.toString());
        String requestBody = request.getBody();
        if (request.isIsBase64Encoded()) {
            requestBody = new String(java.util.Base64.getDecoder().decode(request.getBody()), StandardCharsets.UTF_8);
        }
        String message = "HTTP Trigger request body: " + requestBody;
        context.getLogger().info(message);
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "text/plain");
        return HTTPTriggerResponse.builder().withStatusCode(200).withHeaders(headers).withBody(request.getBody())
                .withIsBase64Encoded(request.isIsBase64Encoded()).build();
    }
}

HTTPTriggerEvent.java – Format permintaan

HTTPTriggerEvent.java

package example;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(setterPrefix = "with")
public class HTTPTriggerResponse {
    private int statusCode;
    private Map<String, String> headers;

    @JsonProperty("isBase64Encoded")
    private boolean IsBase64Encoded;
    private String body;
}

HTTPTriggerResponse.java – Format respons

HTTPTriggerResponse.java

package example;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(setterPrefix = "with")
public class HTTPTriggerResponse {
    private int statusCode;
    private Map<String, String> headers;

    @JsonProperty("isBase64Encoded")
    private boolean IsBase64Encoded;
    private String body;
}

Dependensi Maven tambahan

Tambahkan Jackson dan Lombok bersama fc-java-core:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.16.1</version>
</dependency>
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.30</version>
</dependency>

Memanggil fungsi

  1. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin dikelola.

  3. Klik tab Triggers untuk mendapatkan titik akhir publik pemicu HTTP.

  4. Jalankan perintah curl berikut: Ganti URL dengan titik akhir publik pemicu HTTP Anda. Respons yang diharapkan:

       curl -i "https://dev-jav-test-fc-luiqas****.cn-shanghai.fcapp.run" -d 'hello fc3.0'
       HTTP/1.1 200 OK
       Content-Disposition: attachment
       Content-Length: 11
       Content-Type: application/json
       X-Fc-Request-Id: 1-652503f2-afbfd2b1dc4dd0fcb0230959
       Date: Tue, 10 Oct 2023 07:57:38 GMT
    
       hello fc3.0%
Penting
  • Jika Authentication Method pemicu HTTP diatur ke No Authentication, gunakan Postman atau curl untuk langsung memanggil fungsi.

  • Jika Authentication Method diatur ke Signature Authentication atau JWT Authentication, gunakan metode autentikasi yang sesuai. Lihat Authentication.

Error umum

Penangan ini dirancang untuk pemanggilan pemicu HTTP. Memanggilnya melalui tombol Test Function di konsol dengan input string biasa (seperti "Hello, FC!") menyebabkan error deserialisasi:

{
    "errorType": "com.fasterxml.jackson.databind.exc.MismatchedInputException",
    "errorMessage": "Cannot construct instance of `example.HTTPTriggerEvent` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('Hello, FC!')\n at [Source: (byte[])\"\"Hello, FC!\"\"; line: 1, column: 1]",
    "stackTrace": [
        "com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)",
        "com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1588)",
        "..."
    ]
}

Untuk menguji penangan ini, panggil melalui titik akhir pemicu HTTP atau berikan muatan JSON yang sesuai dengan struktur HTTPTriggerEvent.

Program contoh

FC menyediakan program contoh yang menunjukkan berbagai jenis penangan: