2015-03-03 3 views
2

У меня есть проект Spring MVC с Maven управляющими зависимостями. Мне нужно прочитать JSON и отобразить его содержимое в представлении.Невозможно найти однозначный метод: class com.fasterxml.jackson.databind.node.ArrayNode.get (java.lang.Long)

Учитывая простой объект JSON

{ 
    "items" : [{"model" : "m1"}, {"model" : "m2"}, {"model" : "m3"}] 
} 

I левереджа пакеты из Jackson Project читать и анализировать файл, а затем установите значение в @Controller

JsonNode itemsNode = Node.path("items"); 
model.addAttribute("items", itemsNode); 

На JSP, я получить значения

Item 0: ${items.get(0)}, Item 1: ${items.get(1)}, Item 2: ${items.get(2)} 

Проблема, с которой я столкнулся, это

все работает, как и ожидалось, когда я использую

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

, но я получил сообщение об ошибке,

HTTP Status 500 - javax.el.MethodNotFoundException: Невозможно найти однозначный метод: класс com.fasterxml.jackson. databind.node.ArrayNode.get (java.lang.Long)

, когда я заменил обе <dependency> на

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.5.1</version> 
</dependency> 

без изменений исходного кода (кроме import). Весна 4.1.5.RELEASE

ответ

2
${items.get(0)} 

СПЯ является обработкой 0, как долго, но ArrayNode.get()takes an int. Выезд the answer to this question for more details. Короче говоря, вы можете попробовать следующее:

${items.get((0).intValue())} 
+0

Да, я это заметил. Так что попробовал «Integer.parseInt (« 0 »)» и «new Integer (0)» без везения. И ваш подход работает, спасибо вам большое. Но я также задаюсь вопросом, почему 0 обрабатывается по-разному на другой версии Джексона. –

+0

Да, мне это было интересно. Я взглянул на Javadocs, и обе версии получили (int). –

+0

Я предполагал, что это должно быть выполнение JEE-реализации для интерпретации JSP, и обнаружил, что Tomcat 8.0.9 дал мне еще одну ошибку 'Не удалось найти однозначный метод: class com.fasterxml.jackson.databind.node.ArrayNode.get (java.lang .Integer) '. Но более поздняя версия Tomcat отлично работает с вашим подходом (проверено на 8.0.12 и 8.0.20). –

Смежные вопросы