Un controlador de Java procesa los eventos entrantes en su función de Function Compute (FC). FC enruta cada invocación al método de controlador especificado en la configuración de su función.
Para invocar funciones mediante activadores HTTP o nombres de dominio personalizados, Use an HTTP trigger to invoke a function.
Formato del controlador
Establezca el parámetro Handler en la consola de Function Compute con a continuación formato:
[Package name].[Class name]::[Method name]
Por ejemplo, si su paquete es example, su clase es HelloFC y su método es handleRequest:
example.HelloFC::handleRequest
Los nombres del paquete y de la clase son personalizables, pero deben coincidir con el valor de Handler en la configuración de su función. Create an event function.
Interfaces del controlador
Los controladores de Java deben implementar una interfaz de la biblioteca fc-java-core:
|
Interfaz |
Entrada/Salida |
Cuándo usarla |
|
|
|
Para procesar flujos de bytes sin procesar o datos que no se asignan a un POJO |
|
|
Tipos POJO personalizados |
Recomendada cuando trabaja con datos JSON estructurados que se asignan a objetos de Java |
Dependencia de Maven
Agregue fc-java-core a su archivo pom.xml:
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
Consulte el repositorio de Maven para obtener la versión más reciente.
Antes de crear una función, empaquete su código y la dependencia fc-java-core en un archivo JAR. Compile and deploy code packages.
StreamRequestHandler
StreamRequestHandler lee la entrada desde un InputStream y escribe la salida en un 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**: contiene los datos del evento que se pasan al invocar la función.**
outputStream**: recibe los datos de retorno de la función.**
context**: proporciona información de tiempo de ejecución, como el ID de solicitud y el par de accesskey temporal. Tipo:com.aliyun.fc.runtime.Context. Context.
PojoRequestHandler
PojoRequestHandler<I, O> utiliza tipos genéricos para la entrada y la salida. Ambos deben ser POJO compatibles con la serialización JSON.
Clase del controlador
// 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);
}
}
Clases de solicitud y respuesta
// 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;
}
}
Ejemplo de evento de entrada
{
"firstName": "FC",
"lastName": "aliyun"
}
Ejemplo: invocar una función con un activador HTTP
Este ejemplo muestra cómo gestionar solicitudes de activadores HTTP y devolver respuestas.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una función creada en un entorno de ejecución de Java con el código de ejemplo que se muestra a continuación. Consulte Create an event function
Un activador HTTP configurado para la función. Consulte Configure an HTTP trigger
Código de ejemplo
El controlador utiliza PojoRequestHandler con HTTPTriggerEvent y HTTPTriggerResponse como tipos de entrada y salida. Para conocer los formatos de solicitud y respuesta, consulte Use an HTTP trigger to invoke a function.
App.java: clase de entrada
HTTPTriggerEvent.java: formato de solicitud
HTTPTriggerResponse.java: formato de respuesta
Dependencias adicionales de Maven
Agregue jackson y lombok junto con 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>
Invocar la función
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.
En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.
Haga clic en la pestaña Triggers para obtener el endpoint público del activador HTTP.
-
Ejecute a continuación comando de curl. Reemplace la URL por el endpoint público de su activador:
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%
Si Authentication Method está establecido en No Authentication, invoque la función directamente con Postman o curl.
Si Authentication Method es Signature Authentication o JWT Authentication, aplique la autenticación correspondiente. Authentication.
Errores comunes
Este controlador espera la entrada de un activador HTTP. Si lo invoca mediante el botón Test Function con una cadena simple (como "Hello, FC!"), se genera un error de deserialización:
{
"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)",
"..."
]
}
Para probar este controlador, invóquelo a través del endpoint del activador HTTP o proporcione una carga útil JSON que coincida con la estructura de HTTPTriggerEvent.
Programas de ejemplo
A continuación se muestran programas de ejemplo para distintos tipos de controladores:
java11-blank-stream-event: controlador de eventos con formato de flujo.
java11-blank-pojo-event: controlador de eventos con formato POJO.