java中json对象有没有方法可以把null值转换成空字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中json对象有没有方法可以把null值转换成空字符串相关的知识,希望对你有一定的参考价值。

1.SerializerFeature.WriteMapNullValue 是否输出值为null的字段,默认为false
也就是说有null时会输出而不是忽略(默认策略是忽略,所以看不到为null的字段)

2.WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 
注意是字段是字段是字段,而不是json.put("key",null),所以用它时,字段为null的可以转换为空字符串。

3.如果让输出的json中所有为null的字符串都变成空字符串,最简单的做法就是加一个值过滤器,这样就避免了有的字段为null,有的字段为空字符的现象。

参考技术A 1.SerializerFeature.WriteMapNullValue 是否输出值为null的字段,默认为false也就是说有null时会输出而不是忽略(默认策略是忽略,所以看不到为null的字段)
2.WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 注意是字段是字段是字段,而不是json.put("key",null),所以用它时,字段为null的可以转换为空字符串。
3.如果让输出的json中所有为null的字符串都变成空字符串,最简单的做法就是加一个值过滤器,这样就避免了有的字段为null,有的字段为空字符的现象。
参考技术B 可以呀,用字符串替换嘛

@RequestBody 没有将 JSON 映射到 Java 对象 - Spring Boot

【中文标题】@RequestBody 没有将 JSON 映射到 Java 对象 - Spring Boot【英文标题】:@RequestBody not mapping JSON to Java Object - Spring Boot 【发布时间】:2019-11-10 15:27:21 【问题描述】:

我无法将我的 JSON 从帖子的方法主体转换为我的 POJO,在我的控制器类中使用 @RequestBody

我调试了错误,发现某些字段已映射,而其他字段未映射。像这样(POJO)

name: null, typeOfPlan: null, Email: example@gmail.com, PhoneNum: 123456789, Website: test.org, Username: null, password: 1234,这很奇怪。

JSON:


    "confirmPassword": "1234",
    "email": "example@gmail.com",
    "password": "1234",
    "phoneNum": "123456789",
    "name": "Hello world",
    "typeOfPlan": "Test",
    "userName": "user",
    "website": "test.org"

控制器

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SomeController 

    @Autowired
    private Service foo;

    @CrossOrigin
    @PostMapping(value = "/create")
    private void createAccount(@RequestBody BigFoo bigFoo) 
        foo.createAccount(bigFoo);
    

从这里,我调用我的服务,然后调用 DAO 类。

POJO

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BigFoo 

    private String name;
    private String typeOfPlan;
    private String email;
    private String website;
    private String phoneNum;
    private String username;
    private String password;


我也尝试在@PostMapping 中允许带有consumes media type 的JSON,但它未能解决这个问题。

使用 Jackson ObjectMapper 效果不佳。

【问题讨论】:

您没有包含实际的 JSON 内容。 给我一秒钟。编辑:我添加了它们在调试模式下出现在我的对象中的确切格式。抱歉,这是我的 POJO,不是 JSON。 分享 JSON 以更好地理解 我添加了 JSON 尝试添加gettter和setter方法或使用lombok。 【参考方案1】:

我的问题很简单: 我的 Angular 项目中的变量,将数据发送到我的 Spring Boot 应用程序拼写错误,因此我的后端应用程序无法识别,因此没有映射到我的POJO 正确。


在我更改前端表单变量以匹配我的 POJO 变量后,我得到了:

POJO 数据

name: It's good now, typeOfPlan: 2 Year, Email: example@gmail.com, PhoneNum: 123456789, Website: test.org, Username: Master, password: 1234

Spring Boot 无法从 JSON 映射 nametypeOfPlanUsername,因为它们根本不匹配我后端中的那些。


之前

Name, typeOfPlan, userName

之后

name, type, username

谢谢大家!

【讨论】:

我实际上遇到了同样的问题,我不敢相信我没有发现它。我的请求中有带有 3 的“密码”,但我的眼睛看不到它:“密码”。我很高兴你发布了这个,因为它让我回去仔细检查。【参考方案2】:

首先,如果您使用的是Postman, curl etc..,请尝试以这种方式发送 json:


    "confirmPassword": "1234",
    "email": "example@gmail.com",
    "password": "1234",
    "phoneNum": "123456789",
    "name": "Hello world",
    "typeOfPlan": "Test",
    "userName": "user",
    "website": "test.org"

第二,我得到的唯一空值是username,因为你在你的json中发送它是这样的:userName,你应该检查你的json是否与你的POJO兼容

【讨论】:

不,我没有使用 Postman 或 Curl。我直接从我的前端 Angular 项目发送它。 我发送的 JSON 不是空值,我不明白你想说什么。 我的意思是用户名里面有一个大写 N,因为它没有用 我明白了,但是我从我的 chrome 检查器那里得到了 JSON,它输出了 console.log()。所以它不应该真正影响我的 JSON,因为它只是 JSON 的一种表示。我从来没有碰过它。【参考方案3】:

我相信问题出在内容类型上!将其设置为application/json。在 postman 或 curl 中指定。

如果你用js发送试试这个例子

axios.post(
                "/rest/yoururl",
                jsObject
            ).then(
                function (response) 
                    console.log(response.data);
                .bind(this)
            );

默认内容类型为 json

通过卷曲:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '"username":"xyz","password":"xyz"' \
  http://url

在邮递员中:

Headers-> put key Content-Type -> value application/json.如果你是 在邮递员中

【讨论】:

在哪里可以找到content-type 以便将其设置为application/json Headers-> 放置键 Content-Type -> 值 application/json。如果你是邮递员 我不知道将它放在我的项目中的哪个位置,我也没有邮递员或 Curl,或任何其他处理您所说的内容的应用程序。我通过在前端项目中输入表单手动发送 JSON 并提交。 操作,这是个问题。然后检查浏览器中的 Content-type 是什么 我的浏览器在哪里?我在这里找不到它:***.com/questions/15148497/…我正在检查器中查看我的网络选项卡。【参考方案4】:

在我的例子中,我将数据包裹在这样的括号中 - data。很好地仔细检查结构是数组还是对象。

【讨论】:

以上是关于java中json对象有没有方法可以把null值转换成空字符串的主要内容,如果未能解决你的问题,请参考以下文章

关于序列化成JSON是NULL值转成空字符串,要怎么搞

玩转web之json---将表单通过serialize()方法获取的值转成json

java对象 转json 对象参数为null 的参数丢失

[C++]json cpp中将整个Json::Value转成std::string或者把里面值转成string类型

[C++]jsoncpp中将整个Json::Value转成std::string或者把里面值转成string类型

如何把ResultSet转换成Java对象