2013-07-18 2 views
3

Я унаследовал проект Spring MVC 3.1.1, и мне нужно использовать Jackson для сериализации объектов в JSON. У меня есть класс объектов, как:Как настроить/настроить аннотации Jackson для работы в Spring MVC?

public class User { 
    Integer id; 
    String name; 

    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; 
    } 
} 

и контроллер, как это:

@Controller 
@RequestMapping(value = "/home") 
public class homeController { 
    @RequestMapping(value = "/") 
    public @ResponseBody User home() { 
     User user; 
     user = new User(); 

     user.setId(1); 
     user.setName("Drew"); 

     return user; 
    } 
} 

Перейдите к/дома, и я получаю:

{"id":1,"name":"Drew"} 

Великий, это первый шаг вниз. Теперь, если я хочу игнорировать параметр id, в документации Jackson я должен использовать аннотацию @JsonIgnore. Проблема, с которой я сталкиваюсь, заключается в том, что NetBeans не может найти какой-либо пакет аннотаций для импорта для Jackson, поэтому я не могу использовать аннотации. Я попробовал загрузить баночки Jackson 2.2 и добавить их в свой проект (который затем позволяет мне импортировать аннотации), но аннотация @JsonIgnore не имеет никакого эффекта, когда я это делаю.

Я подозреваю, что у меня отсутствует файл jar из Spring MVC или мне нужно что-то настроить в XML-файлах проекта, как бы я узнал, является ли это (или нет)? Я относительно новичок в Java, и я никогда раньше не использовал Spring, поэтому, если есть какая-то дополнительная информация, которая была бы полезной, что я не знал, что вам нужно, спросите, и я сделаю все возможное, чтобы найти ее. Заранее благодарим за любую помощь, которую вы можете дать!

редактировать:

Чтобы уточнить, я попытался с помощью аннотаций, как это:

public class User { 
    Integer id; 
    String name; 

    @JsonIgnore 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    @JsonProperty("userName") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

и так:

@JsonIgnoreProperties({"id"}) 
public class User { 
    Integer id; 
    String name; 

    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    @JsonProperty("userName") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

и возвращаемый JSON всегда одинаково:

{"id":1,"name":"Drew"} 
+0

Вы используете maven или что-то в этом роде, или используете только систему зависимостей NetBeans? –

+0

Нет Maven, просто NetBeans. – asgallant

+0

Убедитесь, что у вас нет как Jackson1 (codehaus), так и Jackson2 (quickxml) в вашем пути к классам. –

ответ

1

Я закончил обновление до Spring 3.2.2, которое вместе с библиотеками Jackson 2.2 устранило проблему. Все аннотации Джексона работают правильно. Я предполагаю, что это означает, что с установкой 3.1.1 было что-то неладное, которое испортило материал Джексона, но кто знает?

Спасибо всем, кто ответил.

1

Добавьте JARs Джексона в ваш путь к классам. Если вы используете Maven, добавьте Jackson2 в качестве зависимости или скопируйте требуемые JAR в свой путь к классам вручную. Весна сделает все остальное.

+0

Я добавил JJS Jackson 2.2 в проект, который устраняет проблему с возможностью импорта аннотаций Джексона, но аннотации по-прежнему не работают, когда я это делаю. – asgallant

1

Попробуйте использовать @JsonIgnoreProperties вместо @JsonIgnore

+0

Я пробовал это, и он не работает. Кажется, что ни одна из аннотаций не влияет на выход. – asgallant

5

Вы пропали без вести Джексон зависимости от вашего пути к классам. Вам нужно добавить зависимость от следующих банков:

  1. ДЖЕКСОНА-жильного
  2. ДЖЕКСОНА-DataBind
  3. ДЖЕКСОНА-аннотаций

После того как вы эта зависимость добавили вы можете предотвратить поля из сериализовано путем размещения @JsonIgnore аннотацию на поглотителе так:

public class User { 
    Integer id; 
    String name; 

    @JsonIgnore 
    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; 
    } 
} 
+0

В идеале, да, это должно сработать. Моя проблема в том, что она не работает. – asgallant

+0

@asgallant - обновил мой ответ, основываясь на изменении вашего вопроса. Вам все еще не хватает jar-зависимостей. Взгляните на список выше в моем ответе. – gregwhitaker

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