【问题标题】:Spring boot, output json http requestbody before serializeSpring boot,序列化前输出json http requestbody
【发布时间】:2016-01-21 12:12:53
【问题描述】:

Spring boot 收到 http 请求后会执行以下步骤。

1.首先读取json http requestbody

2.然后将其反序列化为@RequestBody 对象。

// Json 数据映射器

ObjectMapper 映射器 = new ObjectMapper();

mapper.writeValueAsString(请求)

我可以使用ObjectMapper输出json body,但是如果我可以在json body被反序列化为object之前直接输出它会更有效。

是否可以在spring boot反序列化为object之前输出json请求体?

【问题讨论】:

    标签: json spring spring-boot httprequest


    【解决方案1】:

    而不是使用这个:

    @RequestMapping("/...")
    public Bar findBar(@RequestBody Foo foo) {
        // ...
    }
    

    你可以这样做:

    @RequestMapping("/...")
    public Bar findBar(Reader reader) {
        String json = reader.read..( );
        Foo foo = objectMapper.read( ... );
    }
    

    但我认为没有办法获得反序列化的对象和原始响应。不过我可能错了。

    【讨论】:

    • 非常感谢。但我想在日志中输出原始请求正文并使用@RequestBody。有可能吗?
    • @Yuu 正如我所提到的,我认为没有办法同时获得两者。要么获取对象然后序列化,要么获取原始请求并反序列化。
    • @Yuu,不客气。如果您认为它解决了您的问题,您可以使用旁边的勾号来接受答案。
    【解决方案2】:

    如果你想将 JSON 作为字符串对象,

    @RequestMapping("/...")
    public Bar findBar(@RequestBody("json") String json) {
        // ...
    }
    

    以上 sn-p 会给你 JSON 字符串作为输出。现在,如果您想将其转换为对象,则可以手动使用

    ObjectMapper mapper = new ObjectMapper();
    

    【讨论】:

    • 非常感谢,我可以输出原始请求输出了。但是如果我使用你推荐的方式,@Valid 注释似乎不起作用。
    • 我添加了一些代码。感谢您的确认。
    • 这不再像 Spring 所说的那样工作了 can't find symbol value
    【解决方案3】:
    @RequestMapping(value = "/...", method = RequestMethod.POST)
    public Bar getBar(@Valid @RequestBody String jsonBody){
        System.out.println("data:" + jsonBody);
    }
    
    public class BarRequestEntity{
    
        // AuthenticationKey
        @NotBlank(message = "id {error.empty}")
        private String id;
    }
    

    我使用@Valid检查请求参数。

    【讨论】:

    • 您使用@@valid 的方式错误。您需要使用@@valid 定义用户定义的对象
    • 你能给我举个例子吗,我应该把@valid放在哪里?
    • 如果您想要输出为 JSON 数据,那么您需要使用 objectmapper 或 GS​​ON 库。
    • 是的,我可以按照你的方法输出json,但是我现在不能使用@valid...
    • 你必须提到有效的注解和 RequestBody Foo foo ,然后你需要使用 objectmapper 或 GS​​ON lib 手动将 foo 对象转换为 json。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2017-10-30
    • 2020-10-01
    相关资源
    最近更新 更多