2010-12-09 58 views
0

爲了在域對象和json對象之間進行轉換,我成功地使用了spring-mvc和json。如何用spring mvc手動使用任意json對象?

現在,我想寫一個控制器,只接受任何json,驗證它並以緊湊的可串行化形式爲服務層提供它。 (json字符串就足夠了,任何緊湊的字節數組表示更好)。我目前的計算策略是這樣的:

@RequestMapping(value="/{key}", method=RequestMethod.GET) 
@ResponseBody 
public Object getDocument(@PathVariable("username") String username, 
     @PathVariable("key") String key, 
     HttpServletRequest request, 
     HttpServletResponse response) { 
    LOGGER.info(createAccessLog(request)); 
    Container doc = containerService.get(username, key); 
    return jacksonmapper.map(doc.getDocument(), Map.class); 
} 

@RequestMapping(value="/{key}", method=RequestMethod.PUT) 
public void putDocument(@PathVariable("username") String username, 
     @PathVariable("key") String key, 
     @RequestBody Map<String,Object> document, 
     HttpServletRequest request, 
     HttpServletResponse response) { 
    LOGGER.info(createAccessLog(request)); 
    containerService.createOrUpdate(username, key,document); 
} 

注意,這個方法是行不通的,因爲我不想在put方法和get方法返回地圖只是{「本」 :空值};。我如何配置我的方法?

乾杯,

回答

2

Spring自動具有此功能。你只需要在你的類路徑上使用<mvc:annotation-driven />和jackson。然後,spring將通過JSON映射器處理接受頭設置爲*/json的所有請求以及各自的響應。

+0

Bozoho,JSON映射不是問題,但我需要什麼方法簽名來獲得我可以序列化的通用json對象?我目前只使用public void put(@RequestBody MySpecificBean bean)從JSON獲取一個bean。 – Jan 2010-12-19 17:34:01

+0

那麼,你將如何處理任意對象? – Bozho 2010-12-19 17:49:39

0

它很容易。您不需要@RequestBody註釋。

@RequestMapping(value="/{key}", method=RequestMethod.PUT) 
    public void putDocument(@PathVariable("username") String username, 
      @PathVariable("key") String key, HttpServletRequest request, HttpServletResponse response) { 

     try { 
      String jsonString = IOUtils.toString(request.getInputStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     LOGGER.info(createAccessLog(request)); 
     containerService.createOrUpdate(username, key,document); 
    } 
相關問題