Если это интерфейс -проект HTTP+JSON в качестве клиента, и нет JSP и других представлений представлений, использование фреймворка Джерси, безусловно, является первым выбором. В рамках архитектуры на основе Spring3 MVC тип возврата HTTP+JSON также очень поддерживает. Тем не менее, в разработке работа, очень часто обновляется обновлением функций, основанных на установленной архитектуре. Я столкнулся с необходимостью использования интерфейса типа HTTP+JSON RETURN на основе StrUTS2, который основан на установленной структуре структуры.
Есть два способа вернуть JSON в StrUTS2: 1. Используйте выходной поток сервлета, чтобы написать json String; 2. Используйте Struts2, чтобы расширить JSON.
1. Используйте выходной поток сервлета
Суть интерфейса JSON состоит в том, что во время процесса передачи данных JSON она на самом деле просто передает обычную строку, которая соответствует формату синтаксиса JSON. Так называемый «объект JSON» относится к результату анализа и обертывания этой строки JSON.
Так что здесь вам нужно только написать строку в формате синтаксиса JSON в Httpservletresponse Сервла. Здесь вы используете метод PrintWriter, и, конечно, вы также можете использовать метод потока. Следует отметить, что кодирование не устанавливается перед вызовом getWriter (либо называется SetContentType, либо метод SetCaracterCoding для установки кодирования), Httpservletresponse вернет экземпляр PrintWriter, кодируемый с кодированием по умолчанию (либо ISO-8859-1). Это вызовет искаженного китайца. Более того, при установлении кодирования его необходимо установить перед вызовом GetWriter, в противном случае он будет недействительным.
Записать код интерфейса:
Разница между методом здесь и методом General Struts2 заключается в том, что это тип void return.
public void write () бросает ioException {httpservletresponse response = servletactionContext.getResponse (); / * * Кодирование не устанавливается перед вызовом getWriter (либо называется SetContentType, либо метод SetCaracterEncoding для установки), * httpservletresponse вернет экземпляр PrintWriter, кодируемый с кодированием по умолчанию (либо ISO-8859-1). Это вызовет искаженного китайца. Более того, при установлении кодирования его необходимо установить перед вызовом GetWriter, в противном случае он будет недействительным. * */ response.setContentType ("text/ html; charset = utf-8"); //response.setcharacterencoding("utf-8 "); Printwriter Out = response.getWriter (); // JSON передается в виде нормальной строки в процессе доставки. Вот простой сплайсинг одного для тестирования строки jsonstring = "{/" user/": {/" id/":/" 123/",/" "name/":/"Zhang san/",/"say/":/"Hello, я - действие, чтобы напечатать JSON!/",/"Password/":/"Json/",/"" Успешное/": True}": «Истинно»; out.println (jsonstring); out.flush (); out.close (); }Конфигурационное действие
Из следующей конфигурации можно ясно видеть, что конфигурация ничем не отличается от обычной конфигурации действия, но нет возврата.
<name = "write" method = "write" />
Возвращаемое значение
{«Пользователь»: {«ID»: «123», «Имя»: «Чжан Сан», «Скажи»: «Здравствуйте, я - действие для печати JSON!», «Пароль»: «JSON»}, «Успех»: True}2. Расширение JSON с использованием Struts2
Чтобы использовать это расширение, вам обязательно нужно добавить пакет поддержки. После отладки, вот два варианта:
1.xwork-core-2.1.6.jar и struts2-json-plugin-2.1.8.jar. Если вы хотите использовать Struts2-json-plugin-2.1.8.jar, ваш xwork-core-*. Jar не может выбрать 2.2.1 и выше версий, потому что версии 2.2.1 и выше Xwork-Core-*. Jar не имеет таких пакетов, как org.apache.commons.lang. При запуске Tomcat появится: java.lang.noclassdeffounderror: org.apache.commons.lang.xwork.stringutils.
2.xwork-2.1.2.jar и Jsonplugin-0.34.jar. Если вы хотите использовать JSonPlugin-0.34.jar для поддержки, вам нужно переключить Xwork-Core-*. JAR на Xwork-2.1.2.jar. Потому что JSonPlugin-0.34.Jar требует поддержки com.opensymphony.xwork2.util.textutils. 2.2.1 и выше версий Xwork-Core-*. Jar находится, и нет такого класса в Xwork-Core-2.1.6.jar.
Наконец, я хочу сказать, что это действительно не стоит из -за оригинального метода строительства. Я действительно устал. Использование автоматических компонентов, таких как Maven, в значительной степени избегает ошибок, которые полагаются на различия в версиях между частными частями. Метод компонента Maven будет использоваться в «конфигурации Zerts2 Zero» в третьем разделе.
Написание кода интерфейса
В этом классе метод json () является обычным методом Struts2. Я не вижу здесь никаких строк в формате JSON, потому что мы собираемся оставить эту работу в расширение, чтобы сделать это. Без каких -либо настроек возвратные значения всех методов Getter в классе будут включены в строку JSON, возвращенную клиенту. Чтобы устранить атрибуты, которые не должны быть включены, вам необходимо использовать @json (serialize = false) на методе Getter для аннотации в структуре класса. Конечно, вы также можете напрямую удалить этот метод получения, когда он не влияет на другие предприятия. Таким образом, результатом возврата в этом примере является строка json-формата, которая преобразует объект DataMap.
Пакет JSON; импортировать java.util.hashmap; импортировать java.util.map; Импорт org.apache.struts2.json.annotation.json; Import Com.OpensyMphony.xwork2.ActionsUpport; / ** * JSON TEST * * @Author Watson XU * @Date 2012-8-4 06:21:01 */ Public Class JsonAction расширяет ActionSupport {Private Static Final Long Serialversionuid = 1L; Приватная карта <строка, объект> dataMap; Private String Key = "Просто см."; public String json () {// Данные в DataMap будут преобразованы в строку JSON с помощью Struts2, поэтому сначала вы должны очистить данные в нем. dataMap = new Hashmap <String, Object> (); Пользователь пользователь = новый пользователь (); user.setName ("Zhang San"); user.setpassword ("123"); dataMap.put ("user", user); // Поместите тег, является ли операция успешной dataMap.put («успех», true); // Возврат успеха возврата результата; } public map <string, object> getDatamap () {return dataMap; } // Установите атрибут ключа, чтобы не возвращаться в качестве контента JSON @json (serialize = false) public String getKey () {return Key; }}Настройка ацитона
В конфигурации, во-первых, пакет, в котором находится действие, необходимо наследовать JSON-Defaul или унаследованный родительский пакет наследует JSON-Default. Это настраивает тип возврата действия в JSON и может настроить его сериализованные свойства и другие параметры класса.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // DTD Struts Configuration 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> extends = "struts-default, json-default"> <name = "json" method = "json"> <result type = "json"> <!-Здесь мы указываем атрибут, который будет сериализован Struts2. Этот атрибут должен иметь соответствующий метод getter в действии -> <param name = "root"> dataMap </param> </result> </action> </package> </struts>
Возвращаемое значение
{"Успех": True, "пользователь": {"name": "Zhang San", "пароль": "123"}}3. Как использовать конфигурацию struts2 Zero, используя компонент Maven:
3.1) Чтобы создать веб -приложение, мы все еще используем Maven для его создания. Процесс строительства относится к блогу Limingnihao: используйте Eclipse для создания проекта Maven's SpringMVC.
3.2) Добавить зависимость struts2, зависимость struts2 нулевой конфигурации и зависимость struts2 json:
<Deperiancess> <!-Основная зависимость основной связи-> <Dependency> <groupId> org.apache.structs </GroupId> <ArtifactId> Structs2-core </artifactid> <serse> 2.3.4 </version> <Тип> JAR </type> <Scope> Compicle </scope> </зависимость> <!-Struts2 Zero. <groupId> org.apache.structs </GroupId> <ArtifactId> Structs2-convention-plugin </artifactid> <sersive> 2.3.4 </version> <Тип> jar </type> <clacpe> compile </racpope> </orgesce> <!-struts2-зависимость-> <deryse> <group> </orgache> <!-Struts2. <Artifactid> struts2-json-plugin </artifactid> <sersive> 2.3.4 </version> <type> jar </type> <cerpope> compile </scope> </deperency> </depertive>
После тестирования в вышеупомянутой комнате зависимостей нет ошибки, совместимой с версией, не только потому, что они та же версия, но и из-за метода автоматического строительства Maven.
3.3) Настройка web.xml и включить Struts2:
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "2,5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electan "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filtra> <filter-name> strutspreanxecutefilter </filter-name> <filter> <Filter-Name> strUTSpReAndexecutefilter </filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.strutspreareAndexecutefilter </filter-class> <init-param> <param-name> config </param-name> <param-value> struts-default.xml, struts-plugin.xml, struts.xml </vefault.xml, struts-plugin.xml, struts.xml <//value> init-par> </inefault.xml, struts-plugin.xml, struts.xml <//value. </filter> <Filter-Mapping> <Filter-name> strutSpreAndexecutefilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
3.4) Настройте struts.xml и установите некоторые основные константы и приложения:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // DTD Struts Configuration 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <name = "base" extends = "json-default, struts-default"> <!-Здесь вы можете установить некоторые глобальные отношения отображения возврата и т. Д. name = "struts.multipart.maxsize" value = "1073741824"/> <constant name = "struts.devmode" value = "false"/> </struts>
3.5) Напишите и настройте действие. Установлен не указано, поэтому для плагина соглашения он будет относиться к всем классам Java с именами классов, заканчивающих действием как действие:
Пакет Watson.action; импортировать java.util.hashmap; импортировать java.util.map; импорт org.apache.struts2.convention.annotation.action; Импорт org.apache.struts2.convention.annotation.namespace; Импорт org.apache.struts2.convention.annotation.namespace; Импорт org.apache.struts2.convention.annotation.parentpackage; импорт org.apache.struts2.convention.annotation.result; Импорт org.apache.struts2.convention.annotation.results; @Parentpackage ("base") @namespace ("/watson") @results ({@result (name = "json", type = "json", params = {"root", "msg"})}) public class jsonaction {@Action (value = "json") public string () {msg = new hashmap <string = "json"); msg.put («flag», «успех»); Map <string, string> user = new hashmap <string, string> (); user.put ("name", "Zhang San"); user.put ("age", "34"); msg.put («Пользователь», пользователь); вернуть "Json"; } // =================================================================================== public Map <String, Object> getMsg () {return msg; }} 3.6) Разверните проект, запустите контейнер и введите: http: // localhost: 7070/struts2foo/watson/json в адресной строке браузера. Подождите, пока результаты станут следующими:
{"flag": "Успех", "Пользователь": {"AGE": "34", "Имя": "Zhang San"}}}}Из приведенных выше результатов мы видим, что после включения нулевой конфигурации конфигурация в XML отсутствует и вместо этого аннотирована с аннотацией в каждом действии. Здесь мы удаляем вышеуказанную конфигурацию в XML и записываем следующий код в верхнюю часть вышеупомянутого JSONACTION:
@Parentpackage ("base") @namespace ("/watson") @results ({@result (name = "json", type = "json", params = {"root", "msg"})})Корень эквивалентен конфигурации параметра в конфигурации XML.
4. Приложение:
Подробное объяснение настраиваемых параметров, когда практическим типом действия является JSON:
<result type = "json"> <!- здесь указывает свойства, которые будут сериализованы Struts2. This property must have a corresponding getter method in the action --> <!-- By default, the values of all getter methods with return values will be sequenced, regardless of whether the method has corresponding properties --> <param name="root">dataMap</param> <!-- Specifies whether to serialize empty properties --> <param name="excludeNullProperties">true</param> <!-- Specifies the properties in the serialized DataMap-> <param name = "IncludeProperties"> userList.*</param> <!-Здесь указывает, какие свойства будут исключены из DataMap. Эти исключенные свойства не будут сериализованы и, как правило, не отображаются в то же время, что и приведенная выше конфигурация параметра -> <param name = "excludeproperties"> успех </param> </result>
Загрузка вложения
Strutsjson.rar
Struts2foo.rar
Выше приведено все содержание struts2, возвращающих объекты JSON. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.