转载

Java+Json+Boolean=坑货 人在江湖,身不由己 一个小实验找出路 Java Boolean有点设计过头了

Java+Json+Boolean=坑货 人在江湖,身不由己 一个小实验找出路 Java Boolean有点设计过头了

Java+Json+Boolean=坑货 人在江湖,身不由己 一个小实验找出路 Java Boolean有点设计过头了

接收前端的JSON数据,接收.net接口的JSON数据,遇到IsOpen,IsValid,解析不出来!遇到鬼似的~~一个小实验,找到出路!

实验数据准备

直接在浏览器的console里,输入


 

JSON.stringify({IsOpen:true,IsValid:false})

//得到实验串


 

//大概放到变量里是这样

//String json = "[{/"IsOpen/":true,/"IsValid/":false},{/"IsOpen/":true,/"IsValid/":true}]";

String json = "{/"IsOpen/":true,/"IsValid/":true}";

准备简单工程

建一个纯净的java工程,快速调试,不然时间都浪费在编译上了。

main方法


 

public class BootMe {

@SuppressWarnings("unused")

public static void main(String[] args) throws InterruptedException, IOException {

//String json = "[{/"IsOpen/":true,/"IsValid/":false},{/"IsOpen/":true,/"IsValid/":true}]";

String json = "{/"IsOpen/":true,/"IsValid/":true}";

JsonBean result = (JsonBean) JSON.parseObject(json, JsonBean.class);

JsonBean result1 = new ObjectMapper().readValue(json, JsonBean.class);

System.out.println(json);

System.out.println("==after==");

System.out.println(JSON.toJSONString(result));

System.out.println(new ObjectMapper().writeValueAsString(result));

System.out.println(new ObjectMapper().writeValueAsString(result1));

System.out.println("==end==");

}

}

Bean


 

package cn.test;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;

@Data

public class JsonBean {

@JsonProperty("IsOpen")

private boolean open;

@JsonProperty("IsValid")

private boolean valid;

public void setIsValid(boolean valid) {

this.valid = valid;

}

}

实验结果


 

{"IsOpen":true,"IsValid":true}

==after==

{"open":false,"valid":false}

{"IsOpen":false,"IsValid":false}

{"IsOpen":true,"IsValid":true}

==end==

实验操作组合就不细化了,实验的结论是

一、如果使用JSON.parseObject,或希望controller正常接收到类似isValid的参数值,可以采用以下方式定义Bean


 

package cn.test;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;

@Data

public class JsonBean {

private boolean valid;

}

public void setIsValid(boolean valid) {

this.valid = valid;

}

二、使用希望使用@JsonProperty(“IsValid”),来解决此问题,请使用ObjectMapper。

本实验所用到的POM包


 

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.4</version>

</dependency>

<!-- json -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.7.3</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.7.3</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>2.7.3</version>

</dependency>

感受

java的boolean设计,有点过度设计了,设计者以自身的想法为boolean增加了有区于其他类型的特性,然后被无数人踩坑~受不了的人就再立门户,出新语言了!

Java+Json+Boolean=坑货 人在江湖,身不由己 一个小实验找出路 Java Boolean有点设计过头了

Java+Json+Boolean=坑货 人在江湖,身不由己 一个小实验找出路 Java Boolean有点设计过头了
技术岛公众号
原文  http://www.jishudao.com/2019/08/28/javajsonboolean_badluck/
正文到此结束
Loading...