• Spring Boot—08Jackson处理JSON




    package com.sample.smartmap.controller;
    
    import java.io.IOException;
    import java.math.BigDecimal;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.bee.sample.ch3.entity.User;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializerProvider;
    
    @Controller
    @RequestMapping("/jackson")
    public class JacksonSampleController {
        
        Log log = LogFactory.getLog(JacksonSampleController.class);
        //参考JacksonConf
        @Autowired ObjectMapper mapper;
        
        @GetMapping("/now.json")
        public @ResponseBody Map now(){
            Map map = new HashMap();
            map.put("date", new Date());
            return map;
        }
        
        // 以类似于XML DOM的方式进行解析JSON格式的数据
        @GetMapping("/readtree.json")
        public @ResponseBody String readtree() throws JsonProcessingException, IOException{
            String json = "{"name":"lijz","id":10}";
            JsonNode node = mapper.readTree(json);
            
            String name = node.get("name").asText();
            int id = node.get("id").asInt();
            return "name:"+name+",id:"+id;
            
        }
        
        // 以对象绑定的方式解析JSON数据
        @GetMapping("/databind.json")
        public @ResponseBody String databind() throws JsonProcessingException, IOException{
            String json = "{"name":"lijz","id":10}";
            User user = mapper.readValue(json, User.class);
            return "name:"+user.getName()+",id:"+user.getId();
            
        }
        
        // 将对象转化为JSON字符串
        @GetMapping("/serialization.json")
        public @ResponseBody String custom() throws JsonProcessingException {
    
            User user = new User();
            user.setId(1l);
            user.setName("hello");
            String str = mapper.writeValueAsString(user);
            
            return str;
            
        }
        
    
        
    @JsonIgnoreProperties ({"id","photo"})
        public static class SamplePojo{
            Long id;
    
            String name;
    
            byte[] photo;
    
            @JsonIgnore
            BigDecimal salary;
    
            Map<String , Object> otherProperties = new HashMap<String , Object>();
    
            public Long getId() {
                return id;
            }
            public void setId(Long id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public byte[] getPhoto() {
                return photo;
            }
            public void setPhoto(byte[] photo) {
                this.photo = photo;
            }
            public BigDecimal getSalary() {
                return salary;
            }
            public void setSalary(BigDecimal salary) {
                this.salary = salary;
            }
    
            @JsonAnyGetter
            public Map<String, Object> getOtherProperties() {
                return otherProperties;
            }
    
             @JsonAnySetter
            public void setOtherProperties(Map<String, Object> otherProperties) {
                this.otherProperties = otherProperties;
            }
             
        }
    
    // 以Token的方式生成Java对象
    public static class Usererializer extends JsonSerializer<User> {  
        @Override  
        public void serialize(User value, JsonGenerator jgen, SerializerProvider provider)   
          throws IOException, JsonProcessingException {  
            jgen.writeStartObject();  
            jgen.writeStringField("user-name", value.getName());  
            jgen.writeEndObject();  
        }  
    }  
    
    // 以XML DOM的方式生成Java对象   
    public class UserDeserializer extends JsonDeserializer<User> {  
           
        @Override  
        public User deserialize(JsonParser jp, DeserializationContext ctxt)   
          throws IOException, JsonProcessingException {  
            JsonNode node = jp.getCodec().readTree(jp);  
            String name = node.get("user-name").asText(); 
            User user = new User();
            user.setName(name);
            return user;
        }  
    }  
        
        
    }



    package com.smartmap.sample.conf;
    
    import java.text.SimpleDateFormat;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Configuration
    public class JacksonConf {
    
        @Bean
        @Primary
        public ObjectMapper getObjectMapper() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
            return objectMapper;
        }
    }


    package com.smartmap.sample.entity;
    
    import java.math.BigDecimal;
    
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonView;
    
    public class User {
        public interface IdView {};
        public interface IdNameView extends IdView {};
        
        @JsonView(IdView.class)
        private Integer id;
    
        @JsonView(IdNameView.class)
        private String name;
    
        @JsonIgnore
        BigDecimal salary;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public BigDecimal getSalary() {
            return salary;
        }
    
        public void setSalary(BigDecimal salary) {
            this.salary = salary;
        }
    
    }

    package com.smartmap.sample.controller;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.smartmap.sample.entity.User;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonView;
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Controller
    public class DataBindController {
        @Autowired
        ObjectMapper mapper;
    
        @RequestMapping("/updateUsers.json")
        public @ResponseBody String say(@RequestBody List<User> list) {
            StringBuilder sb = new StringBuilder();
            for (User user : list) {
                sb.append(user.getName()).append(" ");
            }
            return sb.toString();
        }
    
        @RequestMapping("/customize.json")
        public @ResponseBody String customize() throws JsonParseException, JsonMappingException, IOException {
            String jsonInput = "[{"id":2,"name":"xiandafu"},{"id":3,"name":"lucy"}]";
            JavaType type = getCollectionType(List.class,User.class);
            List<User> list = mapper.readValue(jsonInput, type);
            return String.valueOf(list.size());
        }
        
        //产生一个集合类型说明
        public JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
            return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
        }
        
        // User的ID字段不转化为JSON
        @JsonView(User.IdView.class)
        @RequestMapping("/id.json")
        public @ResponseBody User queryIds() {
            User user = new User();
            user.setId(1);
            user.setName("hell");
            return user;
        }
        
        @RequestMapping("/dept.json")
        public @ResponseBody Department getDepartment() {
            return new Department(1);
        }
        
        class Department {
            Map map = new HashMap();
            int id ;
            public Department(int id){
                this.id = id;
                map.put("newAttr", 1);
            }
            // 将其它任何不配的键值都放入map中
            @JsonAnyGetter
            public Map<String, Object> getOtherProperties() {
              return map;
            }
            public int getId() {
                return id;
            }
            public void setId(int id) {
                this.id = id;
            }
            
            
        }
        
    }

    package com.smartmap.sample.controller;
    
    import java.io.IOException;
    import java.io.StringWriter;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.smartmap.sample.entity.User;
    import com.fasterxml.jackson.core.JsonFactory;
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonToken;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Controller
    @RequestMapping("/stream")
    public class JacksonStreamController {
        Log log = LogFactory.getLog(JacksonStreamController.class);
    
        @Autowired
        ObjectMapper mapper;
        
        // 以Token的方式解析JSON字符串
        @RequestMapping("/parser.html")
        public @ResponseBody String parser() throws JsonParseException, IOException{
            String json = "{"name":"lijz","id":10}";
            JsonFactory f = mapper.getFactory(); 
            String key=null,value=null;
            JsonParser parser = f.createParser(json);
            // {
            JsonToken token  = parser.nextToken();
            //"name"
            token = parser.nextToken();
            if(token==JsonToken.FIELD_NAME){
                key = parser.getCurrentName();
                
            }
            
            token = parser.nextToken();
            //"lijz"
            value = parser.getValueAsString();
            parser.close();
            return key+","+value;
            
        }
        
        // 以Token的方式生成JSON字符串
        @RequestMapping("/generator.html")
        public @ResponseBody String generator() throws JsonParseException, IOException{
            JsonFactory f = mapper.getFactory(); 
            //输出到stringWriter
            StringWriter sw = new StringWriter();
            JsonGenerator g = f.createGenerator(sw);
            // {
            g.writeStartObject();
            
            // "message", "Hello world!"
            g.writeStringField("name", "lijiazhi");
            // }
            g.writeEndObject();
            g.close();
            return sw.toString();
        }
        
        
    
    }













  • 相关阅读:
    C# WinForm程序退出的方法
    SpringCloud 微服务框架
    idea 常用操作
    Maven 学习笔记
    SpringBoot 快速开发框架
    html 零散问题
    Java方法注释模板
    Seating Arrangement
    hibernate 离线查询(DetachedCriteria)
    hibernate qbc查询
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/8921130.html
Copyright © 2020-2023  润新知