在我的应用中,我有一个自定义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如何将Auth
像文档中的HttpRequest
,HttpHeaders
和其他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());
});
}
}
但是它似乎没有我希望的那样。
答案 0 :(得分:2)
您需要注册TypedRequestArgumentBinder
bean。
您可以查看SessionArgumentBinder
作为此操作的示例,因为会话也只是一个请求属性。