当前位置: 首页 > 面试题库 >

在Spring中编写JSON解串器或对其进行扩展的正确方法

鄢承运
2023-03-14
问题内容

我正在尝试在Spring中编写自定义JSON反序列化器。我想对大部分字段使用默认的序列化html" target="_blank">程序,而对少数属性使用自定义的反序列化程序。可能吗?我正在尝试这种方式,因为大多数属性都是值,因此对于这些,我可以让Jackson使用默认的反序列化器;但是属性很少是引用,因此在自定义反序列化器中,我必须查询数据库以获取引用名称并从数据库中获取引用值。

如果需要,我将显示一些代码。


问题答案:

我进行了很多搜索,到目前为止,找到最好的方法是在这篇文章上:

类进行序列化

package net.sghill.example;

import net.sghill.example.UserDeserializer
import net.sghill.example.UserSerializer
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonDeserialize(using = UserDeserializer.class)
public class User {
    private ObjectId id;
    private String   username;
    private String   password;

    public User(ObjectId id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public ObjectId getId()       { return id; }
    public String   getUsername() { return username; }
    public String   getPassword() { return password; }
}

反序列化器类

package net.sghill.example;

import net.sghill.example.User;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.ObjectCodec;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;

import java.io.IOException;

public class UserDeserializer extends JsonDeserializer<User> {

    @Override
    public User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        ObjectCodec oc = jsonParser.getCodec();
        JsonNode node = oc.readTree(jsonParser);
        return new User(null, node.get("username").getTextValue(), node.get("password").getTextValue());
    }
}

编辑:或者你可以看看这篇文章,它使用com.fasterxml.jackson.databind.JsonDeserializer的新版本。



 类似资料:
  • 只是将Eclipse迁移到Android Studio,在不知道多少快捷方式的情况下费尽周折,导入扩展类方法,如“右键单击->源码->覆盖/实现方法”,然后实现方法。这里我没有找到源选项。我怎样才能包括那些方法。请帮助我尽快得到这个,因为现在我正在键入他们。

  • null 现在的问题是: > 作为控制器方法执行的结果,我将返回对象的映射,该映射将解析为JSON。可能的实体是: {“结果”:“12”} 我应该如何提供基于结果的附加消息?我能想到两个解决办法: > 返回映射,该映射在肯定验证结果的情况下具有result=true,在否定验证结果的情况下具有result=false,以及带有相应消息的errorCode 返回指示验证结果的布尔值,并另外对否定结果

  • 问题内容: 假设我要编写以下HQL查询: 将其编写为参数化查询的正确方法是什么,例如 问题答案: 我不确定如何使用位置参数来执行此操作,但是如果可以使用命名参数而不是位置参数,则可以将命名参数放在方括号内,并且可以使用Query接口中的setParameterList方法将值列表绑定到此参数。

  • 问题内容: 我正在搜索页面,您可以在其中输入搜索查询并将表单提交到。什么PHP函数是最好的,我应该使用它对搜索查询进行编码/解码? 问题答案: 对于URI查询,请使用;对于其他任何事情,请使用/。 和之间的区别是 根据 application/x-www-form-urlencoded编码(空格用编码),而 根据简单的 Percent-Encoding编码 (空格使用编码)。

  • 问题内容: 我目前使用Cython链接C和Python,并以慢速的python代码获得加速。但是,我想使用goroutines实现非常慢(且可并行化)的代码,但是必须可以从python调用它。 如果有必要,我很乐意通过C(或Cython)来建立数据结构等,但是从错误修复/避免的角度来看,避免这种额外的层将是一件好事。 无需重新发明轮子的最简单方法是什么? 问题答案: 更新2015 :从Go 1.5

  • 问题内容: 是否有一些有关如何在Go中编写Ruby扩展的教程或实践课程? 问题答案: Go 1.5添加了对构建共享库的支持,这些共享库可从C(因此可以通过FFI从Ruby)调用。这使该过程比1.5版之前的版本(需要编写C胶合层)更容易,并且现在可以使用Go运行时,这在现实生活中实际上是有用的(以前无法进行goroutine和内存分配,因为它们需要Go运行时,如果Go不是主要入口点,则该运行时将无法