json转换对象中出现null属性的解决方法

前言:当数据进行json转换时,当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取。原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了null的属性值,客户端也必须要解决。

这里举个今天遇到json转换null值的实例,在下面提一下

代码

Bean

Hr
public class Hr {
    private Integer id;
    private String name;
    private String phone;
    private String telephone;
    private String address;
    private Boolean enabled;
    private String username;
    private String password;
    private String userface;
    private String remark;
    //防止null值,roles预先创建个List实例
    private List<Role> roles  = new ArrayList<>();
    //get、set省略
Role
public class Role {
    private Integer id;
    private String name;
    private String namezh;
    //get、set省略
}

Controller

@RestController
@RequestMapping("/system/hr")
public class HrController {
    @Autowired
    HrService hrService;
    @GetMapping("/")
    public List<Hr> getAllHrs(Integer id){
        return hrService.getAllHrs(id);
    }
}

Service

@Service
public class HrService implements UserDetailsService {
    @Resource
    HrMapper hrMapper;
    public List<Hr> getAllHrs(Integer id) {
        return hrMapper.getAllHrs(id);
    }
}

Mapper

java
public interface HrMapper {
    List<Hr> getAllHrs(Integer id);
}
xml
<resultMap id="BaseResultMap" type="com.lwy.vhr.bean.Hr">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="phone" jdbcType="CHAR" property="phone" />
    <result column="telephone" jdbcType="VARCHAR" property="telephone" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="enabled" jdbcType="BIT" property="enabled" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="userface" jdbcType="VARCHAR" property="userface" />
    <result column="remark" jdbcType="VARCHAR" property="remark" />
</resultMap>

<resultMap id="BaseResultMap2" type="com.lwy.vhr.bean.Hr" extends="BaseResultMap">
    <collection property="roles" ofType="com.lwy.vhr.bean.Role">
      <id column="rid" property="id" jdbcType="INTEGER"/>
      <result column="rname" property="name" jdbcType="VARCHAR"/>
      <result column="rnameZh" property="namezh" jdbcType="CHAR"/>
    </collection>
  </resultMap>
  <select id="getAllHrs" resultMap="BaseResultMap2">
    select h.*,r.`id` as rid,r.`name` as ranme ,r.`nameZh` as rnameZh from hr h,hr_role hrr,role r where h.`id`=hrr.`hrid` and hrr.`rid`=r.`id` and h.`id`!=#{id}
  </select>

数据库

1661877-20190423213657672-686801057.png

测试

这里用Postman来进行测试
1661877-20190423213707123-482820785.png

在这里出现了json转换失败的情况

处理

通过断点调试,从authorities这里打上断点进行debug调试
1661877-20190423213717561-450066585.png

发现取值时出现了null值,然后回想起json对null值的处理时会停止执行,再搜寻着路径去查找原因。。。
1661877-20190423213723531-1815802030.png

总结:这里只是因为自己疏忽将原本有值的属性“变成”了null,在平时开发的时候也会有将原本为null值的属性通过json格式发送到前段做处理。这个时候只要把null值转换成" "空字符串就行了。(建议使用gson)

总结到这里,积累点点滴滴,一步一脚印,加油

转载于:https://www.cnblogs.com/HYMY-L/p/10759169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot ,当你的 POST 接口接受 JSON转换对象时,属性null 的问题可能是由于以下几个原因导致的: 1. 缺少 Jackson 或其他 JSON 解析器依赖:确保在你的项目添加了正确的 JSON 解析器依赖。对于 Spring Boot,一般使用 Jackson 作为默认的 JSON 解析器。你可以在 `pom.xml` 文件添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 2. 缺少正确的注解:确保在你的实体类上添加了正确的注解,以指示 JSON 解析器如何将 JSON 转换对象。常用的注解有 `@JsonProperty` 和 `@JsonAlias`。例如: ```java public class MyObject { @JsonProperty("property_name") private String propertyName; // 省略其他属性方法 } ``` 这里使用了 `@JsonProperty` 注解来指定 JSON 对应的属性名。 3. 请求数据格式不正确:确保发送的 POST 请求包含正确的 Content-Type 头部信息,并且请求体JSON 数据格式正确。一般来说,应该使用 `application/json` 作为 Content-Type。 如果你已经检查了上述问题,还是无法解决属性null 的问题,可以尝试在控制器方法添加 `@RequestBody` 注解来显式指定请求体应该被解析为 JSON。例如: ```java @PostMapping("/api/myendpoint") public void myEndpoint(@RequestBody MyObject myObject) { // 处理接收到的对象 } ``` 这样就会将请求体JSON 数据转换为 `MyObject` 对象。 希望以上解决方案能帮助到你!如果问题仍然存在,请提供更多的代码和错误信息,以便更好地帮助你解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值