杰克逊无法反序列化一些非空字段

时间:2019-08-08 08:58:38

标签: kotlin jackson deserialization

对象反序列化有问题。

我的DTO包含一个配对列表(以前的版本是Map)。

textView

我不断收到data class MyDto( @JsonIgnoreProperties(ignoreUnknown = true) val myField: List<Pair<String, Boolean>>? )

MissingKotlinParameterException

我的json看起来像:

com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class kotlin.Pair<java.lang.String,java.lang.Boolean>] value failed for JSON property first due to missing (therefore NULL) value for creator parameter first which is a non-nullable type\n at [Source: (io.netty.buffer.ByteBufInputStream); line: 9, column: 33] (through reference chain: my.path.MyDto[\"field\"]->java.util.ArrayList[0]->kotlin.Pair[\"first\"])\n\tat org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:162)

如您所见,我已经使列表可以为空,并添加了注释{ "myField" : [ "A": true, "B": false ] } 。但是我仍然得到错误。

我对objectMapper的配置

@JsonIgnoreProperties

我还应该启用/禁用哪些功能?

1 个答案:

答案 0 :(得分:0)

尝试更换

namespace App\Controllers;
use CodeIgniter\Controller;
use App\Models\User_Model;

class Users extends BaseController
{     
        protected $User_Model;
        
        public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
        {
            $this->UserModel = new User_Model();
        }
        
        public function list_users()
        {
            $data['user'] = $this->User_Model->findAll();
            return view('users/list_users', $data);
        }

}

使用

List<Pair<String, Boolean>>

并将JSON更改为:

Map<String, Boolean>

现在应该按预期工作。