栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

@在没有控制器的情况下使用jackson创建对象时有效

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@在没有控制器的情况下使用jackson创建对象时有效

BeanDeserializer
反序列化后,您可以扩展和验证对象。要注册此bean使用
SimpleModule

具有验证的简单bean反序列化器:

class BeanValidationDeserializer extends BeanDeserializer {    private final static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();    private final Validator validator = factory.getValidator();    public BeanValidationDeserializer(BeanDeserializerbase src) {        super(src);    }    @Override    public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {        Object instance = super.deserialize(p, ctxt);        validate(instance);        return instance;    }    private void validate(Object instance) {        Set<ConstraintViolation<Object>> violations = validator.validate(instance);        if (violations.size() > 0) { StringBuilder msg = new StringBuilder(); msg.append("JSON object is not valid. Reasons (").append(violations.size()).append("): "); for (ConstraintViolation<Object> violation : violations) {     msg.append(violation.getMessage()).append(", "); } throw new ConstraintViolationException(msg.toString(), violations);        }    }}

我们可以如下使用它:

import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.databind.BeanDescription;import com.fasterxml.jackson.databind.DeserializationConfig;import com.fasterxml.jackson.databind.DeserializationContext;import com.fasterxml.jackson.databind.JsonDeserializer;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.deser.BeanDeserializer;import com.fasterxml.jackson.databind.deser.BeanDeserializerbase;import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;import com.fasterxml.jackson.databind.module.SimpleModule;import javax.validation.ConstraintViolation;import javax.validation.ConstraintViolationException;import javax.validation.Validation;import javax.validation.Validator;import javax.validation.ValidatorFactory;import javax.validation.constraints.NotNull;import javax.validation.constraints.Pattern;import javax.validation.constraints.Size;import java.io.File;import java.io.IOException;import java.util.Set;public class JsonApp {    public static void main(String[] args) throws Exception {        File jsonFile = new File("./resource/test.json").getAbsoluteFile();        SimpleModule validationModule = new SimpleModule();        validationModule.setDeserializerModifier(new BeanDeserializerModifier() { @Override public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) {     if (deserializer instanceof BeanDeserializer) {         return new BeanValidationDeserializer((BeanDeserializer) deserializer);     }     return deserializer; }        });        ObjectMapper mapper = new ObjectMapper();        mapper.registerModule(validationModule);        System.out.println(mapper.readValue(jsonFile, Pojo.class));    }}class Pojo {    @NotNull    @Size(min = 1, message = "Name should be at least 1 character.")    private String name;    @NotNull    @Pattern(regexp = "^https://github.com/.+/.+$", message = "link to github should match https://github.com/USER/REPOSITORY")    private String github;    // getters, setters, toString()}

For valid JSON payload:

{  "name": "Jackson",  "github": "https://github.com/FasterXML/jackson-databind"}

prints:

Pojo{name='Jackson', github='https://github.com/FasterXML/jackson-databind'}

For invalid JSON payload:

{  "name": "",  "github": "https://git-hub.com/FasterXML/jackson-databind"}

prints:

Exception in thread "main" javax.validation.ConstraintViolationException: JSON object is not valid. Reasons (2): Name should be at least 1 character., link to github should match https://github.com/USER/REPOSITORY,     at BeanValidationDeserializer.validate(JsonApp.java:110)    at BeanValidationDeserializer.deserialize(JsonApp.java:97)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号