Java Spring引导jackson解析器空指针异常

Java Spring引导jackson解析器空指针异常,java,spring,spring-boot,jackson,Java,Spring,Spring Boot,Jackson,我在执行此行时遇到空指针异常: mapper.readTree(..)在spring启动应用程序中。 发生的应用程序代码为: import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackso

我在执行此行时遇到空指针异常:
mapper.readTree(..)
在spring启动应用程序中。 发生的应用程序代码为:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.TextNode;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;


public class JsonCompare {

    private static final ObjectMapper mapper = new ObjectMapper();
        private ArrayList<String> newfileerror = new ArrayList<>();

        static {
            mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
        }


           public ArrayList<String> compare(String json1, String json2) throws IOException {
                    //convert string to node, convert to sorted string, and back to node!!:
                    JsonNode node1 = mapper.readTree(mapper.writeValueAsString(mapper.treeToValue(mapper.readTree(json1), Object.class)));
                    JsonNode node2 = mapper.readTree(mapper.writeValueAsString(mapper.treeToValue(mapper.readTree(json2), Object.class)));
                    compareNodes(node1, node2, "/");
                    return newfileerror;
        }
}
当应用程序试图执行方法“mapper.readTree”时,它给出了这个异常。我不明白为什么会发生这种异常,因为我是这个春季启动的新手。 我已经尝试了很多事情(添加jackson for spring boot的序列化特性配置,因为它正在代码中映射),但都不起作用

Spring引导配置如下所示:

2018-07-24 13:00:09,027 [http-nio-8080-exec-7] DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request
2018-07-24 13:00:16,129 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing POST request for [/compare]
2018-07-24 13:00:16,129 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /compare
2018-07-24 13:00:16,130 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.web.servlet.ModelAndView co.nat.tool.controllers.JSONCompareController.compare(javax.servlet.http.HttpServletRequest,co.nat.tool.beans.TransformationDetails,org.springframework.validation.BindingResult,org.springframework.ui.Model) throws java.lang.Exception]
2018-07-24 13:00:16,130 [http-nio-8080-exec-3] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'JSONCompareController'
2018-07-24 13:00:16,132 [http-nio-8080-exec-3] DEBUG org.springframework.web.cors.DefaultCorsProcessor - Skip CORS processing: request is from same origin
2018-07-24 13:00:16,153 [http-nio-8080-exec-3] DEBUG org.springframework.beans.CachedIntrospectionResults - Not strongly caching class [co.nat.tool.beans.TransformationDetails] because it is not cache-safe
2018-07-24 13:00:17,136 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView co.nat.tool.controllers.JSONCompareController.compare(javax.servlet.http.HttpServletRequest,co.nat.tool.beans.TransformationDetails,org.springframework.validation.BindingResult,org.springframework.ui.Model) throws java.lang.Exception]: java.lang.NullPointerException
2018-07-24 13:00:17,139 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView co.nat.tool.controllers.JSONCompareController.compare(javax.servlet.http.HttpServletRequest,co.nat.tool.beans.TransformationDetails,org.springframework.validation.BindingResult,org.springframework.ui.Model) throws java.lang.Exception]: java.lang.NullPointerException
2018-07-24 13:00:17,146 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView co.nat.tool.controllers.JSONCompareController.compare(javax.servlet.http.HttpServletRequest,co.nat.tool.beans.TransformationDetails,org.springframework.validation.BindingResult,org.springframework.ui.Model) throws java.lang.Exception]: java.lang.NullPointerException
2018-07-24 13:00:17,150 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Could not complete request
java.lang.NullPointerException
        at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:889)
        at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2551)
        at co.nat.tool.cma1.JsonCompare.compare(JsonCompare.java:31)
import javax.ws.rs.ext.ContextResolver;

import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;


@Configuration
public class JacksonConfiguration implements ContextResolver<ObjectMapper>{

    private final ObjectMapper objectMapper;

    public JacksonConfiguration() {
        objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
      }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return objectMapper;
    }
}
导入javax.ws.rs.ext.ContextResolver;
导入org.springframework.context.annotation.Configuration;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
@配置
公共类JacksonConfiguration实现了ContextResolver{
私有最终ObjectMapper ObjectMapper;
公共插孔配置(){
objectMapper=新的objectMapper();
configure(空bean上的SerializationFeature.FAIL\u,false);
configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_key,true);
}
@凌驾
公共对象映射器getContext(类类型){
返回对象映射器;
}
}
谁能告诉我我做错了什么,我需要实施什么来解决这个问题。
我的任务是将web应用程序(已经在工作)迁移到spring boot应用程序,这样我就不能像以前那样更改java代码。我的想法是如上所述将配置添加到spring引导配置文件。

您能告诉我们您试图反序列化的json吗?为什么要这样做:mapper.readTree(mapper.writeValueAsString(mapper.treeToValue(mapper.readTree(json1),Object.class))?!?!?!您多次转换同一对象,这相当于mapper.readTree(json1)@TheOni将JsonNode树转换为具有排序字段键的字符串。与此类似:私有字符串convertNode(最终JsonNode节点)抛出JsonProcessingException{final Object obj=mapper.treeToValue(node,Object.class);最终字符串json=mapper.writeValueAsString(obj);返回json;}