【问题标题】:Jackson JSON mapper by Spring Boot [closed]Spring Boot的Jackson JSON映射器[关闭]
【发布时间】:2018-10-02 18:42:52
【问题描述】:

我的问题很简单,Jackson2ObjectMapperBuilder 只在响应的序列化中起作用,在请求的序列化中不起作用?

谢谢!

【问题讨论】:

  • 否......
  • @luk2302 好的,但是为什么当我定义一个 DTO 对象(带有注释'@JsonInclude(Include.NON_EMPTY)' 作为我的控制器 (@RequestBody) 上的参数时,该对象包含空字段?
  • 你使用 POST 请求,对吧?您似乎没有通过请求发送数据。
  • 是的,我故意发送空字段。我期望的是,当应用程序的内容通过“@RequestBody”参数到达时,该对象仅包含完整字段而不是空字段。换句话说,我希望通过'@RequestBody'来的对象的结构被改造
  • 我不得不说我真的不喜欢你提出问题的方式。你为什么不给我们完整的图片,而是提前问一个像技巧问题一样的东西?你确实意识到“不”是这个问题唯一可以接受的答案,这篇文章就完成了。您不应该在 cmets 中添加更多问题。

标签: java spring spring-mvc spring-boot jackson


【解决方案1】:

您的问题的答案是:不,Jackson 可以将 JSON 反序列化为对象,并将对象序列化回 JSON。这是一个非常强大的库。

您应该首先澄清您看到的行为以及预期的行为,以便更容易知道发生了什么。

我能给你的最简单的代码是:

class DemoApplication {
    static void main(String[] args) {
        SpringApplication.run DemoApplication, args
    }
    @PostMapping("/")
    String greet(@RequestBody Greeting greeting) {
        return "Hello ${greeting.name}, with email ${greeting.email}"
    }
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
class Greeting {
  String name
  String email
}

还有一些对该端点的简单 CURL 请求:

~ curl -H "Content-Type: application/json" -X POST localhost:8080
{"timestamp":"2018-04-22T21:18:39.849+0000","status":400,"error":"Bad Request","message":"Required request body is missing: public java.lang.String com.example.demo.DemoApplication.greet(com.example.demo.Greeting)","path":"/"}

~ curl -H "Content-Type: application/json" -X POST localhost:8080  -d '{}'
Hello null, with email null                                                                     

~ curl -H "Content-Type: application/json" -X POST localhost:8080  -d '{"name": "AlejoDev"}'
Hello AlejoDev, with email null                                                                    

~ curl -H "Content-Type: application/json" -X POST localhost:8080  -d '{"name": "AlejoDev", "email":"info@alejodev.com"}'
Hello AlejoDev, with email info@alejodev.com

因此,当不发送数据时,Spring 将向客户端发送回一个异常,错误代码为 400 (Bad Request)。

其他任何东西(发送一个空对象或上面的数据)都可以正常工作,在需要时将字段设置为 null。

你能发布你的代码吗?

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2016-12-14
    • 2015-04-04
    • 2020-07-04
    • 2019-04-19
    • 2017-08-12
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多