gpt4 book ai didi

spring - 如何以 RESTful 方式编写 Spring Web MVC 3 应用程序?

转载 作者:行者123 更新时间:2023-12-02 09:14:03 25 4
gpt4 key购买 nike

我现在在集成项目上工作了一段时间,主要是构建和集成服务。现在我开始了一个自己的学习项目,从头开始构建一个应用程序,而我目前在编写 Web UI 方面遇到了困难。我使用spring框架作为框架,我希望在第一阶段使用spring web mvc作为UI技术。尽管如此,我还是打算使用 REST Controller ,因为我想在 self 训练的下一步中公开一个可能由移动客户端使用的 API。所以问题确实是:

如何将 Web MVC 前端与后面的 RESTful Controller 绑定(bind)?

谢谢!

最佳答案

您的 REST Controller 是 mvc Controller ,当然有很多替代方法可以让它们返回 json 或 xml。这里有两种选择:

轻巧简单

照常编写 Controller 。让他们无效返回。将 HttpServletResponse 作为 in 参数。使用 json/xml 序列化程序序列化结果并将输出写入响应。 Controller 不会转发到 View 。

例如,您可以使用 http://flexjson.sourceforge.net/序列化为 json。

一个例子:

@RequestMapping(value = "item/{someId}", method = RequestMethod.GET)
public void getItemById(HttpServletResponse response,
@PathVariable("someId") Long itemId) throws IOException {
... your code here, get the Item by the id ...
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JSONSerializer serializer = new JSONSerializer();
serializer.exclude("*.class"); //reduce clutter in your output as you see fit
serializer.serialize(objectToSerialize, response.getWriter());
}

当然,输出到 json 可以存储在其他方法中。这种方法非常容易实现,并且不难理解和使用。

更复杂

使用https://jersey.java.net/ 。这不是“自己动手”,而是一个完整的框架。请按照下列步骤操作:

  1. 编写一个包含要输出的模型的 XSD 文件
  2. 让 jersey 生成反射(reflect)此模型的类文件。这将成为您可以阅读的 java 源代码。
  3. 使用 Jersey 注释编写 Controller 并返回生成的模型对象(或多或少)。

XSD

这个XSD

<xsd:element name="customerBonus" type="customerBonus"/>
<xsd:complexType name="customerBonus">
<xsd:sequence>
<xsd:element name="bonusAmount" type="xsd:long"/>
<xsd:element name="bonusValidTo" type="xsd:date"/>
<xsd:element name="upcomingBonusAmount" type="xsd:long"/>
</xsd:sequence>
</xsd:complexType>

变成这个java代码(为简洁起见,不完整):

@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "customerBonus", propOrder = { "奖金金额", “奖金有效至”, “即将到来的奖金金额”})公共(public)类 CustomerBonus {

protected long bonusAmount;
@XmlElement(required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar bonusValidTo;
protected long upcomingBonusAmount;

/**
* Gets the value of the bonusAmount property.
*
*/
public long getBonusAmount() {
return bonusAmount;
}

/**
* Sets the value of the bonusAmount property.
*
*/
public void setBonusAmount(long value) {
this.bonusAmount = value;
}

启用 Jersey servlet:

<servlet>
<servlet-name>Jersey Spring Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Spring Web Application</servlet-name>
<url-pattern>/yourstarturl/*</url-pattern>
</servlet-mapping>

典型 Controller :

@Path("cart") //base url for service
@Component
@Scope("request")
public class CartAndOrderResource extends AbstractResursResource {

@GET
@Produces({MediaType.APPLICATION_JSON}) //also xml possible here
@Path("{cartId}") //added to base url, final url = cart/{cartId}
public JAXBElement<Cart> getCart(@PathParam("cartId") String cartId) {
return new ObjectFactory().createCart(cartService.getCart(cartId));
}
}

关于spring - 如何以 RESTful 方式编写 Spring Web MVC 3 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827831/

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