2013-02-03 97 views
1

我有一個控制器來擴展MultiActionController,但不使用註釋。一切都是由xml配置的。Spring MVC @ResponseBody

有沒有辦法在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); 
} 

回答

1

排序開放式問題的,我的意思是,你要什麼響應類型,JSON,XML,純文本等,

如果您並不侷限於使用這種特定的控制器你可以設置一個專門用於RESTful響應的新控制器,例如使用@ResponseMapping,正如您在問題開始時試圖實現的那樣。

如果你綁定到這個特定的控制器,並且沒有使用註釋的能力,你也可以直接使用servlet路由。例如:

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以執行某些操作。

0

如果你想獲取列表回到它被稱爲從你可以做這樣的事情:

public ModelAndView login(HttpServletRequest request,HttpServletResponse response) throws ServletRequestBindingException { 

    ModelMap model=new ModelMap(); 

    List<Product> productList=product.getList(); 

    model.add("productList",productList); 
    return new ModelAndView("login", model); 
} 

例如你叫這從一個jsp,然後你可以通過這樣的方式檢索jsp中的數據:

{productList} 

Now通過使用jstl for循環,您可以迭代列表。

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

    }); 
} 
+1

請至少爲您的解決方案添加簡短說明。爲什麼它比一個被接受爲正確的更好? – ElmoVanKielmo

相關問題