1

MultiActionController を拡張し、アノテーションを使用しないコントローラーがあります。すべてが xml によって構成されます。

このメソッドを MultiActionController で再現する方法はありますか?

    @RequestMapping(value = "/products", method = RequestMethod.GET)
        public @ResponseBody List<Product> products() {
            return product.getList();
        }

私が直面している問題は、@ResponeBody でリストを返す方法です。

私の方法は次のようになります。

public ModelAndView login(HttpServletRequest request,HttpServletResponse response) throws ServletRequestBindingException {
    return new ModelAndView("login", model);
}
4

3 に答える 3

1

自由回答形式の質問のようなものです。言いたいのは、json、xml、プレーン テキストなど、どのような応答タイプが必要かということです。

@ResponseMappingこの特定のコントローラーの使用に限定されていない場合は、質問の冒頭で達成しようとしているものを使用するなど、RESTful 応答専用の新しいコントローラーをセットアップできます。

この特定のコントローラーに縛られていて、注釈を使用する機能がない場合は、サーブレットの直接ルートに進むこともできます。例えば:

public void generateProductList(HttpServletResponse response) {
    OutputStream os = response.getOutputStream();
    // This is where you would massage the data into the response type you want
    String responseBody = generateResponseBody(productList);
    os.write(responseBody.getBytes());
    os.flush();
}

応答本文に直接書き込んでいる場合、これはある種の AJAX 呼び出しで使用されると思います。このような場合は、Jackson (または同様の) ライブラリを使用してリストを JSON に変換し、前述の方法のいずれかを使用して応答を書き込むことをお勧めします。JSON を使用できない場合は、リストを CSV 応答に簡単に変換し、javascript を使用して CSV を解析して何かを行うことができます。

于 2013-04-02T20:16:28.920 に答える
0
public ModelAndView products(HttpServletRequest request,HttpServletResponse response) {
    final List<Product> products = product.getList();
    return new ModelAndView(new AbstractView() {

        @Override
        protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            ByteArrayOutputStream baos = this.createTemporaryOutputStream();
            byte[] b = generateBytes(products)
            baos.write(b);
            this.writeToResponse(response, baos);
        };

        private byte[] generateBytes(List<Product> products) {
            // TODO Your codes.
        }

    });
}
于 2013-07-09T13:12:38.603 に答える