SpringMVC 4.1 新特性(一)JSONP的支持

来源:互联网 发布:数据库主键的作用 编辑:程序博客网 时间:2024/06/05 05:20

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

为了启用@ResponseBodyResponseEntity方法的JSONP支持,需声明一个@ControllerAdvice的bean,它扩展了AbstractJsonpResponseBodyAdvice,如下所示其中constructor参数指示JSONP查询参数名称:

  1. package com.somnus.advice;
  2.  
  3. import org.springframework.core.annotation.Order;
  4. import org.springframework.web.bind.annotation.ControllerAdvice;
  5. import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
  6.  
  7. /**
  8. * 对使用HttpMessageConverter的@ResponseBody的支持
  9. */
  10. @Order(2)
  11. /* 需要被扫描 */
  12. @ControllerAdvice(basePackages = "com.somnus")//配置你需要路径下的控制器
  13. public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
  14. public JsonpAdvice() {
  15. super("callback"); //指定jsonpParameterNames
  16. }
  17. }
  1. @Controller
  2. @RequestMapping(value = "response")
  3. public class ResponseBodyBindController {
  4.  
  5. @GetMapping(value="responsebodybind3")
  6. @ResponseBody
  7. public Account responsebodybind2(String username,String password){
  8. Account account = new Account(username,password);
  9. System.out.println("responsebodybind3:" + account);
  10. return account;
  11. }
  12. }
  • 访问http://localhost:8080/SpringMVC/response/responsebodybind

这里写图片描述

  • 访问http://localhost:8080/SpringMVC/response/responsebodybind?callback=callback

这里写图片描述

并且值得一提的是,如果你希望可以支持多种参数,都能支持JSONP,构造方法可以设置多个值,如:

  1. @ControllerAdvice(basePackages = "com.somnus")//配置你需要路径下的控制器
  2. public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
  3. public JsonpAdvice() {
  4. super("callback", "jsonp"); //指定jsonpParameterNames
  5. }
  6. }

那么你将惊喜的看到

这里写图片描述

这里写图片描述

  1. <mvc:view-resolvers>
  2. <mvc:content-negotiation>
  3. <mvc:default-views>
  4. <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
  5. <property name="jsonpParameterNames">
  6. <set>
  7. <value>jsonp</value>
  8. <value>callback</value>
  9. </set>
  10. </property>
  11. </bean>
  12. </mvc:default-views>
  13. </mvc:content-negotiation>
  14. <mvc:jsp prefix="/WEB-INF/views/" suffix=".jsp" />
  15. </mvc:view-resolvers>
  1. /**
  2. * <p>.json结尾返回json</p>
  3. * <p>.xml结尾返回xml</p>
  4. * @author:Somnus
  5. * @return
  6. */
  7. @RequestMapping(value="viewResolver", method = {RequestMethod.GET})
  8. public ModelAndView viewResolver(){
  9. ModelAndView mv = new ModelAndView();
  10. Account account = new Account();
  11. account.setUsername(WebUtil.getRequest().getParameter("username"));
  12. account.setPassword(WebUtil.getRequest().getParameter("password"));
  13. mv.addObject(account);
  14. mv.setViewName("viewResolver");
  15. return mv;
  16. }

  • http://localhost:8080/SpringMVC/account/viewResolver.json?username=aa&password=123

这里写图片描述

  • http://localhost:8080/SpringMVC/account/viewResolver.json?username=aa&password=123&callback=callback

这里写图片描述

  • http://localhost:8080/SpringMVC/account/viewResolver.json?username=aa&password=123&jsonp=callback

这里写图片描述

原创粉丝点击