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