gpt4 book ai didi

java - Spring 和 Jackson 的新手 2. 这个 bean 声明在 Spring MVC 应用程序中允许做什么?

转载 作者:行者123 更新时间:2023-12-01 13:50:54 25 4
gpt4 key购买 nike

我继承了一个 Spring MVC 项目,该项目基本上有几个 Controller 。我在 xml 文件中发现了一个声明。显然,该声明允许编写基于休息的服务和客户端。有人可以用一个例子来解释这些声明所带来的明显魔力吗?

<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>

提前谢谢您。

最佳答案

resttemplate 由 spring 提供,用于在通过网络进行服务调用期间将 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>

通过上面的配置,resttemplate 将使用那些适当的转换器来处理不同的数据类型,正如我所说,它可能是 html、json 或应用程序 xml

我们所做的就是,在不编写java代码的情况下,我们正在配置resttemplate并将在spring上下文中,此配置适用于使用resttemplate的任何地方。

我这里有例子

假设我们调用一个服务来检查用户是否是有效用户

class User{
string userId;

string password;

}

服务响应中的某些代码为 1 有效,0 无效

class ValidUser{
int validCode;
}

首先您需要编码为任何可接受的数据类型,让我们有 application/xml

我在这里所做的只是通过配置文件

在上面的配置中,我添加了 jaxb marshaller 和 unmarshaller(参见上面的配置)

我已经配置了编码器和解码器,并且我正在告诉编码和解码时应使用的可接受的数据类型

最后,下面的配置告诉在编码(request.User 将转换为 xml)和解码(xml 转换回 response.validUser)期间可接受的 java 对象

<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代码,没有任何消息转换器代码,编码器和解码器逻辑,所有这些都使用spring配置在一个衬里中完成。

关于java - Spring 和 Jackson 的新手 2. 这个 bean 声明在 Spring MVC 应用程序中允许做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com