2013-11-13 4 views
0

Я унаследовал весенний проект MVC, который в основном имеет несколько контроллеров. Я наткнулся на объявление в XML-файле. По-видимому, это объявление позволяет писать службы и клиенты на основе отдыха. Может ли кто-нибудь объяснить с примером очевидную магию, которую допускают эти декларации?Новое в Spring и Jackson 2. Что делает эта формация бобов в приложении Spring MVC?

<bean id="restClient" class="org.springframework.web.client.RestTemplate"> 
    <property name="messageConverters"> 
     <util:list> 
      <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 
      <bean id="formMessageConverter" class="org.springframework.http.converter.FormHttpMessageConverter"/> 
     </util:list> 
    </property> 
</bean> 

Заранее спасибо.

+1

Пройдите [Документацию по весне IoC] (http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/html/beans.html). Затем прочитайте javadoc для ['RestTemplate'] (http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/web/client/RestTemplate.html). –

ответ

1

resttemplate by spring, предоставленный для преобразования вашего объекта java в желаемый результат (html string, xml, json и т. Д.) Во время вызова службы по сети, а также, чтобы полученный ответ от службы был отменен обратно на объект java или желаемый тип данных.

<property name="messageConverters"> 
    <util:list> 
     <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 
     <bean id="formMessageConverter" class="org.springframework.http.converter.FormHttpMessageConverter"/> 
     <bean id="messageConverter" 
        class="org.springframework.http.converter.StringHttpMessageConverter" /> 

    </util:list> 

    //marhsaller and unmarshaller 

    <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
    <property name="marshaller" ref="jaxbMarshaller"></property> 
    <property name="unmarshaller" ref="jaxbMarshaller"></property> 
    <property name="supportedMediaTypes"> 
    <list> 
     <value>application/xml</value> 
     <value>text/xml</value> 
     <value>json</value> 
    </list> 
</property> 

через выше конфигурации resttemplate будет использовать эти соответствующие преобразователи для обработки различных типов данных, как я сказал, что это может быть HTML, JSON или приложение XML

все, что мы делаем это, с вне написав java-код, мы настраиваем resttemplate и будем в весеннем контексте, эта настройка применяется там, где когда-либо использовался ваш resttemplate.

У меня есть пример здесь

скажем мы вызываем службу для проверки пользователь является действительным пользователем или не

class User{ 
    string userId; 

    string password; 

} 

и служба ответа с некоторым кодом, как 1 является действительным и 0 недействительными

class ValidUser{ 
    int validCode; 
} 

сначала вам нужно Маршалл в любой из допустимых типов данных, давайте приложение/XML

все, что я делаю здесь, через конфигурационный файл

к описанной выше конфигурации я добавление JAXB маршаллер и unmarshaller (смотри выше конфигурации)

я настроил как маршаллер и unmarshaller, и я говорю допустимые типы данных, которые оба должны использовать в то время как сортировочные и демаршаллизации

и, наконец, ниже конфигурация указует объекты Java, которые являются приемлемыми в ходе сортировочных (request.user будет преобразован в XML) и демаршаллизаций (XML, чтобы преобразовать обратно в response.validUser)

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>com.request.user</value> 
      <value>com.response.validUser</value> 

     </list> 
    </property> 

</bean> 

здесь приходит код Java

здесь вы непосредственно передать свой объект Java, и ваш resttemplate будет маршалом это без каких-либо хлопот !!!

 User user = new User(); 
     user.setName('test'); 
     user.setPassword('password'); 
     // setting media type as xml, and telling convert my user java obj to xml 
     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(MediaType.APPLICATION_XML); 
     HttpEntity<User> entity = new HttpEntity<User> (user , headers); 

     ResponseEntity<validUser> responseEntity = rest.exchange(URL, HttpMethod.POST, entity, validUser.class); 
    // let us assume that service response for valid user <validCode>1<validCode> 
    //then validuserreponse obj will have code as 1, let us say valid user. 
    ValidUser validUserResponse = responseEntity.getBody(); 

как мудрые вы можете также обрабатывать простой HTML текст

headers.setContentType(MediaType.TEXT_HTML); 

    HttpEntity<String> entity = new HttpEntity<String>(htmlString, headers); 
    ResponseEntity<String> htmlStringresponse = rest.postForEntity(URL, entity, String.class); 

, если вы видите, приведенный выше код Java, не имеет какой-либо конвертер сообщения кода, маршаллер и unmarshaller логики, все сделано в один лайнере с использование пружинной конфигурации.

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