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;
@Datapublic class JsonBean {
  @JsonProperty("IsOpen")  private boolean open;  @JsonProperty("IsValid")  private boolean valid;  public void setIsValid(boolean valid) {    this.valid = valid;  }}

实验结果

扫描二维码关注公众号,回复: 8855315 查看本文章
  •  
  •  
  •  
  •  
  •  
  •  
{"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;
@Datapublic 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增加了有区于其他类型的特性,然后被无数人踩坑~受不了的人就再立门户,出新语言了!

发布了39 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhongdaiqi/article/details/100126059
今日推荐