关于SpringBoot中的Converter

发布于 2022-09-12 04:15:24 字数 1456 浏览 11 评论 0

关于Converter只能转换表单提交的数据,如果是以Json的方式提交就不能转化了请问整个源码怎么分析啊

这是我的Controller

    @PostMapping("/hello")
    public String hello( TestDtoWrapper dto) {
        return new Gson().toJson("666");
    }

这是我的POJO

    public static class TestDto {
        private String[] mids;

        public String[] getMids() {
            return mids;
        }

        public void setMids(String[] mids) {
            this.mids = mids;
        }
    }

    public static class TestDtoWrapper {
        private TestDto testDto;

        public TestDto getTestDto() {
            return testDto;
        }

        public void setTestDto(TestDto testDto) {
            this.testDto = testDto;
        }
    }

这是我的Converter

@Component
public class SpringToTestDtoCoverter implements Converter<String, HelloWorld.TestDto> {
    @Override
    public HelloWorld.TestDto convert(String source) {
        String[] split = source.split(",");
        HelloWorld.TestDto testDto=new HelloWorld.TestDto();
        testDto.setMids(split);
        return testDto;
    }
}

经测试,使用@RequestBody的方式接收参数,系统抛出无法转化的异常,使用表单提交数据则正常显示

希望大佬们可以告知~ 感谢!

参数上传成功转化
image.png

参数转化失败
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑看君怀她人 2022-09-19 04:15:24

我自己debug了一下,粗浅解释一波,楼主搞清楚还请讲一讲。controller中参数上写RequestBody、RequestParam还有什么都不写的时候参数解析是不一样的,在使用requestbody的时候是通过反序列化json把json转换为java对象,你的json不能反序列化为你的参数,那么就会报错image.png
你参数上啥也没写 参数解析器使用的是
ModelAttributeMethodProcessor
这个解析器在解析参数的时候回去做参数绑定,这个过程会用到你定义的converter, 和requestbody不同的是他会去执行image.png
这个方法会调用你的converter ,这样你的字符串就能绑定到你的参数,但是仔细看requestbody解析的时候并没有执行这个。
希望对你有点帮助

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文