3

私はしばらくの間、統合プロジェクト、主にサービスの構築と統合に取り組んでいました。現在、アプリケーションをゼロから構築するための独自の学習プロジェクトを開始しましたが、現在、Web UI の作成につまずいています。フレームワークとしてSpring Frameworkを使用しましたが、最初のフェーズでSpring Web MVCをUIテクノロジーとして使用したいと考えています。それにもかかわらず、自己トレーニングの次のステップでモバイル クライアントによって消費される可能性のある API を公開したいと考えたので、REST コントローラーを使用するつもりです。だから本当に質問:

Web MVC フロントエンドを背後の RESTful コントローラーに結び付ける方法は?

ありがとうございました!

4

2 に答える 2

1

REST コントローラーは mvc コントローラーであり、もちろん、json または xml を返すための多くの代替手段があります。2 つの選択肢があります。

軽くてシンプル

通常どおりコントローラーを書き込みます。void を返すようにします。HttpServletResponse を in パラメータとして受け取ります。json/xml シリアライザーを使用して結果をシリアル化し、出力を応答に書き込みます。コントローラーはビューに転送しません。

たとえば、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 に、このモデルを反映するクラス ファイルを生成させます。これは、読み取り可能な Java ソースになります。
  3. jersey アノテーションを使用してコントローラーを記述し、生成されたモデル オブジェクトを (多かれ少なかれ) 返します。

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 = { "bonusAmount", "bonusValidTo", "upcomingBonusAmount" }) public class 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;
}

ジャージ サーブレットを有効にします。

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

典型的なコントローラー:

@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));
    }
}
于 2013-05-30T08:46:07.037 に答える
1

これを行う方法については、ここに素晴らしいチュートリアルがあります。xml などの詳細に入ることなく要約するには、Spring に組み込まれているディスパッチャー サーブレットを構成して、いくつかの一連の URL に応答する必要があります/webapp/*。これにより、「/webapp/」で始まるすべてのリクエストがディスパッチャ サーブレットに転送されます。

次に、コントローラークラスを次のように構成します

@Controller
@RequestMapping("/users")
public class UsersController{

  @RequestMapping("/users/{id}")
  public String getUser(@PathVariable("id")String userId, Model model){

  //get the user, etc etc etc

  //return a string that points to the appropriate jsp page
  }
}

春は残りを処理できます。この例では、URL の一部としてユーザー ID を指定しています。また、投稿や取得などの処理など、あらゆる方法を実行できます。任意の数のコントローラーとハンドラー メソッドを作成できます。この場合、URL「/webapp/users/someuserid」に応答します。

于 2013-05-30T04:31:13.977 に答える