【问题标题】:Micronaut automatic conversion of HTTP request parametersMicronaut 自动转换 HTTP 请求参数
【发布时间】:2019-01-11 13:06:20
【问题描述】:

我目前正在努力尝试设置 micronaut,以便自动将参数从 http 请求 uri 转换为 pojos。

具体来说,我想实现这样的目标:

@Controller
public class FooBarBazController {

    @Get("/{foo}/{bar}")
    public Baz doSomething(Foo foo, Bar bar) {
        return new Baz(foo, bar);
    }

}

假设FooBar 可以从字符串值构造。

我从服务器得到的唯一响应是

{
  "_links": {
    "self": {
      "href": "/forever/young",
      "templated": false
    }
  },
  "message": "Required argument [Foo foo] not specified",
  "path": "/foo"
}

我已经尝试了以下方法:

  • 定义一个注册两个bean的@FactoryTypeConverter<String, Foo>TypeConverter<String, Bar>
  • 将参数分别定义为@QueryValue("foo")@QueryValue("bar")
  • 将参数分别定义为@PathVariable("foo")@PathVariable("bar")

这些似乎都没有帮助,我在网上找不到任何与我的问题相似的参考。

有人知道我如何指示框架执行自动转换和绑定吗?

谢谢。

【问题讨论】:

    标签: java type-conversion micronaut


    【解决方案1】:

    对于 Micronaut 1.3,唯一需要的是为 FooBar 定义一个 TypeConverter

    @Singleton
    public class FooTypeConverter implements TypeConverter<String, Foo> {
        @Override
        public Optional<Foo> convert(String fooString, Class<Foo> targetType, ConversionContext context) {
            return new Foo(fooString);
        }
    }
    

    ...

    @Singleton
    public class BarTypeConverter implements TypeConverter<String, Bar> {
        @Override
        public Optional<Bar> convert(String barString, Class<Bar> targetType, ConversionContext context) {
            return new Bar(barString);
        }
    }
    

    就是这样。

    在您的控制器中,您可以像 Micronaut 知道的任何其他类型一样使用 FooBar

    @Get("/foo/{foo}")
    public HttpResponse<FooResponse> getFoo(@PathVariable Foo foo) {
        ...
    }
    

    ...

    @Get("/bar/{bar}")
    public HttpResponse<BarResponse> getBar(@PathVariable Bar bar) {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      如果您能够在1.0.3 版本中使用newly introduced @PathVariable,您将一切就绪。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多