Java 新的春天和杰克逊2。这个bean声明在SpringMVC应用程序中允许什么?
我继承了一个基本上有几个控制器的SpringMVC项目。我在一个xml文件中发现了一个声明。显然,这个声明允许编写基于rest的服务和客户端。有人能用一个例子来解释这些声明所带来的明显的魔力吗Java 新的春天和杰克逊2。这个bean声明在SpringMVC应用程序中允许什么?,java,spring,spring-mvc,resttemplate,Java,Spring,Spring Mvc,Resttemplate,我继承了一个基本上有几个控制器的SpringMVC项目。我在一个xml文件中发现了一个声明。显然,这个声明允许编写基于rest的服务和客户端。有人能用一个例子来解释这些声明所带来的明显的魔力吗 <bean id="restClient" class="org.springframework.web.client.RestTemplate"> <property name="messageConverters"> <util:list>
<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>
提前感谢。spring提供的resttemplate,用于在网络服务调用期间将java对象转换为所需的输出(html字符串、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>
某些代码为1的服务响应有效,而代码为0的服务响应无效
class ValidUser{
int validCode;
}
首先,您需要马歇尔到任何可接受的数据类型,让我们有application/xml
我在这里所做的就是通过配置文件
在上面的配置中,我添加了jaxb封送器和解封送器(请参见上面的配置)
我已经配置了封送器和解封器,并且我正在告诉在封送和解封时应该使用哪些可接受的数据类型
最后,下面的配置告诉java对象在编组(request.User将被转换为xml)和解组(xml将转换回response.validUser)过程中是可以接受的
com.request.user
com.response.validUser
下面是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();
User User=新用户();
user.setName('test');
user.setPassword(“密码”);
//将媒体类型设置为xml,并告诉我如何将我的用户java obj转换为xml
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION\uXML);
HttpEntity=新的HttpEntity(用户、标题);
ResponseEntity ResponseEntity=rest.exchange(URL,HttpMethod.POST,entity,validUser.class);
//让我们假设有效用户1的服务响应
//然后ValidUserReportonse obj的代码将为1,我们假设为ValidUser。
ValidUser validUserResponse=responseEntity.getBody();
像wise一样,您也可以处理纯html文本
headers.setContentType(MediaType.TEXT_HTML);
HttpEntity<String> entity = new HttpEntity<String>(htmlString, headers);
ResponseEntity<String> htmlStringresponse = rest.postForEntity(URL, entity, String.class);
headers.setContentType(MediaType.TEXT\uHTML);
HttpEntity=新的HttpEntity(htmlString,标题);
ResponseEntity htmlStringresponse=rest.postForEntity(URL、实体、字符串、类);
如果您看到,上面的java代码没有任何消息转换器代码、封送器和解封器逻辑,所有这些都是使用spring配置在一行程序中完成的 通过检查。然后阅读javadoc以获取更多信息。
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();
headers.setContentType(MediaType.TEXT_HTML);
HttpEntity<String> entity = new HttpEntity<String>(htmlString, headers);
ResponseEntity<String> htmlStringresponse = rest.postForEntity(URL, entity, String.class);