【问题标题】:Binding custom objects as parameters in Micronaut http methods (@Get, @Post, ..)在 Micronaut http 方法(@Get、@Post、..)中将自定义对象绑定为参数
【发布时间】:2019-12-04 12:40:26
【问题描述】:

在我的应用程序中,我有一个自定义 Auth 对象,我将其设置为过滤器中的请求参数。

那里没有问题,但现在我所有的控制器看起来都像

@Controller("/path")
public class MyController {

  @Get
  public Whatever get(HttpRequest<?> request) {
    Auth auth = request.getAttribute(SomeClass.AUTH_ATTRIBUTE_NAME);
    // code code code
  }

  @Post
  public Whatever post(HttpRequest<?> request, @Body SomePojo body) {
    Auth auth = request.getAttribute(SomeClass.AUTH_ATTRIBUTE_NAME);
    // code code code
  }

}

我真的很想以某种方式“教”micronaut 如何对待 AuthHttpRequestHttpHeaders 以及文档中 Table 1. Bindable Micronaut Interfaces 的其他值。

基本上我想把上面的东西上交:

@Controller("/path")
public class MyController {

  @Get
  public Whatever get(Auth auth) {
    // code code code
  }

  @Post
  public Whatever post(Auth auth, @Body SomePojo body) {
    // code code code
  }

}

有办法吗?

我正在使用 micronaut 1.2.7。我试过了

@Singleton
class AuthTypeConverterRegistrar implements TypeConverterRegistrar {
    @Override
    public void register(ConversionService<?> conversionService) {
        conversionService.addConverter(HttpRequest.class, Auth.class, request -> {
            return request.getAttribute("").map(Auth.class::cast).orElse(Auth.anonymous());
        });
    }
}

但它似乎没有像我希望的那样工作。

【问题讨论】:

    标签: micronaut


    【解决方案1】:

    你需要注册一个TypedRequestArgumentBinder bean。

    您可以查看SessionArgumentBinder 作为示例,了解如何完成此操作,因为会话也只是一个请求属性。

    【讨论】:

    • 看起来你最近是我最好的朋友——谢谢詹姆斯!
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 2019-09-21
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多