标签: micronaut-rest

micronaut Java 中的全局异常处理

寻找更好的解决方案来处理 micronaut 中的全局异常https://docs.micronaut.io/latest/guide/index.html#errorHandling

控制器

@Controller("/category")
public class CategoryController {
@Delete(uri = "/{id}")
public Maybe<HttpResponse> delete(@NotBlank String id) {
            LOG.info(String.format("API --> Deleting the specified category"));
            return iCategoryManager.Count(id).flatMap(item -> {
                if (item > 0) {
                    iCategoryManager.Delete(id).subscribe();
                    return Maybe.just(HttpResponse.noContent());
                } else
                    return Maybe.just(HttpResponse.notFound());
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

iCategoryManager.Count(id)导致如下异常,如何捕获GlobalExceptionHandler上的异常

io.micronaut.core.serialize.exceptions.SerializationException: Incorrect message body size to deserialize to a Long
    at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes$LongSerDes.deserialize(JavaLangRabbitMessageSerDes.java:314)
    at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes$LongSerDes.deserialize(JavaLangRabbitMessageSerDes.java:306)
    at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes.deserialize(JavaLangRabbitMessageSerDes.java:81)
    at io.micronaut.rabbitmq.intercept.RabbitMQIntroductionAdvice.deserialize(RabbitMQIntroductionAdvice.java:323)
    at io.micronaut.rabbitmq.intercept.RabbitMQIntroductionAdvice.lambda$intercept$22(RabbitMQIntroductionAdvice.java:268)
    at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:132)
    at io.micronaut.reactive.rxjava2.RxInstrumentedSubscriber.onNext(RxInstrumentedSubscriber.java:59)
    at io.reactivex.internal.operators.flowable.FlowableTimeoutTimed$TimeoutSubscriber.onNext(FlowableTimeoutTimed.java:101)
    at io.micronaut.reactive.rxjava2.RxInstrumentedSubscriber.onNext(RxInstrumentedSubscriber.java:59)
    at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:132)
    at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:62)
    at …
Run Code Online (Sandbox Code Playgroud)

java micronaut micronaut-client micronaut-rest

9
推荐指数
1
解决办法
9239
查看次数

Micronaut:如何在日志中打印traceId和spanId?

我已经使用 Spring Boot 很长时间了。我现在正在研究 Micronaut。

我习惯使用 Sleuth 在日志上自动打印跟踪和跨度 ID。Micronaut 中的 sleuth 相当于什么?

如果没有等效项,如何使用 Jaeger 在 Micronaut 中打印跟踪和跨度 ID?

jaeger micronaut micronaut-rest

7
推荐指数
1
解决办法
1261
查看次数

使用 Micronaut 下载文件

我的客户端应该从控制器收到一个文件。问题是客户端只接收一个字符串。如何获取控制器返回的流?

这是我的控制器:

@Get("/{databaseName}")
MutableHttpResponse < Object > createDatabaseBackup(String databaseName) {
    InputStream inputStreamDatabaseBackup = backupTask.exportBackup(databaseName);
    return HttpResponse.ok(new StreamedFile(inputStreamDatabaseBackup, MediaType.APPLICATION_OCTET_STREAM_TYPE));
}
Run Code Online (Sandbox Code Playgroud)

这是我的客户:

@Inject
@Client("${agent.connection-url}")
private RxHttpClient client;

public String getBackup(String dataBaseName) {
    return client.toBlocking().retrieve(HttpRequest.GET("/backup/" + dataBaseName));
}
Run Code Online (Sandbox Code Playgroud)

micronaut micronaut-client micronaut-rest

5
推荐指数
1
解决办法
3795
查看次数

如何在 micronaut GET 请求中将参数设置为不需要?

我需要在请求中将参数设置为“不需要”。

我试过:

 @Get(value = "/list/{username}")
 HttpResponse<?> list(String username, @QueryValue(value = "actionCode") String actionCode) {
     ...
 }
Run Code Online (Sandbox Code Playgroud)

当我发送请求http://localhost:8080/notification/list/00000000000时,会引发以下错误:

{
    "message": "Required Parameter [actionCode] not specified",
    "path": "/actionCode",
    "_links": {
        "self": {
            "href": "/notification/list/00000000000",
            "templated": false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

micronaut micronaut-client micronaut-rest

5
推荐指数
1
解决办法
8806
查看次数

Micronaut 使用 HttpClient 读取超时

我正在努力使用Micronaut HTTPClient多次调用第三方 REST 服务,但没有收到io.micronaut.http.client.exceptions.ReadTimeoutException

要消除第三方依赖性,可以使用调用其自己的服务的简单 Micronaut 应用程序来重现该问题。

控制器示例:

@Controller("/")
public class TestController {
      
    @Inject
    private TestClient client;

    @Get("service")
    String service() {
        return "Hello World Service";
    }
    @Get("mproxy")
    String multiproxy() {
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<20;i++){
            sb.append(client.getService());
        }
        return sb.toString();
    }
    @Get("proxy")
    String proxy() {
        return client.getService();
    }  
}
Run Code Online (Sandbox Code Playgroud)

测试客户端:

@Client("http://localhost:8080")
public interface TestClient {
    
    @Get("/service")
    String getService();

}
Run Code Online (Sandbox Code Playgroud)

使用curl、ab 或postman 直接调用/service 端点不会产生错误。

调用 /mproxy 端点将引发异常

ERROR i.m.r.intercept.RecoveryInterceptor - Type [clienttest.TestClient$Intercepted] executed with error: Read Timeout …
Run Code Online (Sandbox Code Playgroud)

micronaut micronaut-client micronaut-rest

5
推荐指数
1
解决办法
6831
查看次数