Spring Boot的Jackson JSON映射器[关闭]

Posted

技术标签:

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

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

谢谢!

【问题讨论】:

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

你能发布你的代码吗?

【讨论】:

以上是关于Spring Boot的Jackson JSON映射器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spring Boot 映射器从 Jackson 交换到 kotlinx.serialization

Spring Boot 2.x 实践记:Gson

Spring Boot 2.x 实践记:Gson

Spring Boot 2.x 实践记:Gson

Spring boot,Jackson Json 在序列化和反序列化时出现问题

具有两种 MVC 配置的 Spring Boot