2015-02-15 2 views
0

Я использую SpringMVC и имею следующий метод.Как настроить JSON для определенного класса в SpringMVC

@RequestMapping("/login") 
public @ResponseBody User login(User user) { 
    // some operation here .... 
    return user; 
} 

В большинстве случаев SpringMVC конвертирует объект в JSON надлежащим образом. Однако иногда вам может понадобиться настроить JSON. Где я могу настроить JSON для ВСЕГО объекта User. Я хочу, чтобы поведение преобразования объекта User в JSON было согласованным по всем направлениям. Я думаю, что слушатель или интерфейс могут это достичь. Существует ли такое решение?

PS. Что делать, если объект, который я хочу преобразовать, является экземпляром стороннего класса? Я не могу настроить его в определении класса, потому что у меня нет исходного кода ...

ответ

1

Spring использует Jackson для сериализации и десериализации JSON по умолчанию. Вы можете использовать аннотацию Jackson's @JsonSerialize на вашем User типах и поставщиках: реализация JsonSerializer, которая выполняет сериализацию по своему желанию.

+0

Спасибо за быстрый ответ. Но что, если объект, который я хочу преобразовать, является экземпляром стороннего класса? Я не могу настроить его в определении класса, потому что у меня нет исходного кода ... –

+1

@ user2719693 Jackson предоставляет функцию, называемую mixins. Вы комментируете отдельный класс и регистрируете его как шаблон своего класса 'User'. Вам нужно будет предоставить собственный настраиваемый «ObjectMapper» до Spring. –

0

Ниже размещая пример для десериализации JSON массив для ArrayList

@RequestMapping(value = "/mapJsonObjects", method = RequestMethod.POST) 
public static ModelAndView parseJSONObjects(@RequestParam String jsonList,HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 
    JSONParser parser=new JSONParser(); 
    ArrayList filteredList = new ArrayList(); 
    Object obj = parser.parse(jsonList); 
    JSONArray newList = (JSONArray)obj; 
    filteredList = newList; 
       ----------- 

}

Для преобразования списка массива в массив JSON. Сначала добавьте ниже фасоль springServlet.xml

<bean name="jsonView" 
    class="org.springframework.web.servlet.view.json.JsonView"> 
    <property name="contentType"> 
     <value>text/html</value> 
    </property> 
</bean> 

Затем из контроллера возвращает ArrayList, как показано ниже

   Map<String, Object> filteredMap = new LinkedHashMap<String, Object>(); 
       List<Accountdb> filteredList; 
       ------filteredMap logic ----------- 
      filteredAccountMap.put("rows", filteredList); 
      return new ModelAndView("jsonView", filteredMap);