傳回json用「@ResponseBody」註解,「@ResponseBody」是作用在方法上的,「@ResponseBody」表示方法的回傳結果直接寫入「HTTP response body」。
本篇文章將介紹兩種範例進行JSON回傳註解方式示範。
範例1
@ResponseBody是作用在方法上的,@ResponseBody 表示方法的回傳結果直接寫入HTTP response body 中,一般在非同步取得數據式使用【也就是AJAX】,在使用@RequestMapping後,回傳值通常解析為跳轉路徑,但加上@ResponseBody 後回傳結果不會被解析為跳轉路徑,而是直接寫入HTTP response body 中。例如非同步取得 json 數據,加上 @ResponseBody 後,會直接回傳 json 數據。 @RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個物件。
下面的部分位於Spring-mvc.xml或dispatcherServlet-servlet.xml中(Spring 3.0中ServletName-servlet.xml取代了Spring-mvc.xml)
<!-- 用于将对象转换为 JSON --> <bean> <property> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean></bean> <bean> <property> <list> <ref></ref> <ref></ref> </list> </property> </bean>
在對應的Controller中:
@RequestMapping(value="/login",method=RequestMethod.POST) public @ResponseBody User login(String username,String password){ User user = userService.login(username, password); return user; }
這裡我使用的jackson套件:
(1)jackson-core 2.5.0
(2)jackson-databind 2.5.0
(3)jackson-annotations 2.5.0
導入後build path;
警告:若用hibernate等orm工具產生的pojo類,一對一,對多等關係可能會輸出無限迴圈的json:
需要使用在pojo類別中導入com.fasterxml.jackson.annotation.JsonIgnore,並為需要屏蔽的類別添加@JsonIgnore註解,這樣被註解的屬性就不會出現在json中了。
範例2
@ResponseBody @RequestMapping(value = "/login") public ModelAndView ajaxLogin(Model model,User user,HttpServletRequest request, HttpSession session){ String errorMessage=loginCommon(model, user, request, session); Map map=new HashMap(); if(ValueWidget.isNullOrEmpty(errorMessage)){ map.put(Constant2.AJAX_LOGIN_RESULT, "success"); }else{ map.put(Constant2.AJAX_LOGIN_RESULT, "failed"); } map.put("error", errorMessage); model.addAttribute("user", null); return new ModelAndView(new MappingJacksonJsonView(),map); }
或
model.addAttribute("user", user1);
運行結果:
以上是返回json用什麼註解的詳細內容。更多資訊請關注PHP中文網其他相關文章!