Статьи

Java говорит с iOS: объекты Java в сериализации Apple plist

Я рад объявить о своем первом проекте с открытым исходным кодом java-plist-serializer, который может помочь вам в интеграции Java и особенно Spring-приложений с iOS-приложениями.  
Фон
Я работаю над проектом, в котором в качестве бэкенда используется веб-приложение Java, а клиенты — устройства iOS. Недавно я получил задание создать веб-сервис, который возвращает plist — формат данных списка свойств , используемый в iOS — в качестве ответа. Почему plist, а не JSON или классический XML? Если вам нужно разрабатывать для iOS <5.0 — нет собственных классов для десериализации JSON. Формат списка свойств поддерживается основными библиотеками iOS, поэтому десериализация в NSDictionary супер быстрая и эффективная.
Существует немного связанных с plist библиотек для Java, но каждая из них требует много ручной работы и шаг за шагом переписывает объекты Java в эквиваленты Java классов Apple NS *. Я думаю, что никто не любит такого рода задачи. Вот почему я разработал библиотеку для сериализации объектов Java в Plist аналогично сериализации XStream XML .  

Java-PLIST-сериализатору

java-plist-serializer — это проект с открытым исходным кодом, размещенный на Github, который помогает развивать связь между Java-приложением и iOS-приложением.

  • не зависит от какой-либо библиотеки, связанной с XML
  • настраиваемый вывод благодаря стратегиям @PlistIgnore , @PlistAlias и Naming
  • Потокобезопасный — может использоваться как синглтон в проекте
  • расширяемый — можно легко добавлять обработчики для дополнительных объектов
  • Интеграция Spring Framework, предоставляемая PlistView

использование

Сердцем библиотеки является PlistSerializerImpl . Чтобы сериализовать объекты в plist, вы должны создать экземпляр PlistSerializerImpl и вызвать один из методов сериализации. Например:

Входные классы:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Post {
    private String title;
    private Integer views = 0;
    private List<Comment> comments = new ArrayList<Comment>();
    private Author author;
 
    public Post(Author author, String title, Integer views) {
        this.title = title;
        this.views = views;
        this.author = author;
    }
}
 
public class Comment {
    private String content;
    private String author;
 
    public Comment(String author, String content) {
        this.content = content;
        this.author = author;
    }
}
 
public class Author {
    private String name;
}

Объекты этих классов создаются и plistSerializer.toXmlPlist метод plistSerializer.toXmlPlist

1
2
3
4
5
6
Post post = new Post(new Author("jason bourne"), "java-plist-serializer introduction", 9);
post.addComment(new Comment("maciejwalkowiak", "first comment"));
post.addComment(new Comment("john doe", "second comment"));
 
PlistSerializerImpl plistSerializer = new PlistSerializerImpl();
String xml = plistSerializer.toXmlPlist(post);

Переменная xml будет содержать:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>author</key>
        <dict>
            <key>name</key>
            <string>jason bourne</string>
        </dict>
        <key>comments</key>
        <array>
            <dict>
                <key>author</key>
                <string>maciejwalkowiak</string>
                <key>content</key>
                <string>first comment</string>
            </dict>
            <dict>
                <key>author</key>
                <string>john doe</string>
                <key>content</key>
                <string>second comment</string>
            </dict>
        </array>
        <key>title</key>
        <string>java-plist-serializer introduction</string>
        <key>views</key>
        <integer>9</integer>
    </dict>
</plist>

Интеграция Spring Framework

Чтобы вернуть plist в качестве ответа контроллера Spring MVC, вы можете использовать PlistView, который расширяет AbstractView .

Существует несколько способов настройки Spring MVC. Самый простой для понимания пример использования PlistView:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
@Controller
public class BlogController {
    @RequestMapping(value = "/loadBlogPost", method = RequestMethod.GET)
    public ModelAndView loadBlogPost() {
        Post post = new Post(new Author("jason bourne"), "java-plist-serializer introduction", 9);
        post.addComment(new Comment("maciejwalkowiak", "first comment"));
        post.addComment(new Comment("john doe", "second comment"));
 
        ModelMap model = new ModelMap();
        model.addAttribute("RESULT", notification);
 
        return new ModelAndView(new PlistView(), model);
    }
}

Более подробную документацию можно найти на странице проекта github.

Вывод

Не стесняйтесь раскошелиться, вытянуть. Если вы обнаружите какие-либо проблемы, пожалуйста, сообщите о них на github.

Ссылка: Java говорит с iOS: Java-объекты для сериализации Apple plist от нашего партнера JCG Мачея Уоковяка в блоге « Путь к разработке программного обеспечения» .