当前位置:主页 > java教程 > spring4新特性之web开发增强

spring4中web开发增强知识点分享

发布:2020-01-07 15:36:31 105


为找教程的网友们整理了spring4 web开发相关的编程文章,网友廖飞驰根据主题投稿了本篇教程内容,涉及到spring、web开发、spring4新特性之web开发增强相关内容,已被105网友关注,相关难点技巧可以阅读下方的电子资料。

spring4新特性之web开发增强

从Spring4开始,Spring以Servlet3为进行开发,如果用Spring MVC 测试框架的话需要指定Servlet3兼容的jar包(因为其Mock的对象都是基于Servlet3的)。另外为了方便Rest开发,通过新的@RestController指定在控制器上,这样就不需要在每个@RequestMapping方法上加 @ResponseBody了。而且添加了一个AsyncRestTemplate ,支持REST客户端的异步无阻塞支持。 

1、@RestController

Java代码  

@RestController 
public class UserController { 
  private UserService userService; 
  @Autowired 
  public UserController(UserService userService) { 
    this.userService = userService; 
  } 
  @RequestMapping("/test") 
   public User view() { 
    User user = new User(); 
    user.setId(1L); 
    user.setName("haha"); 
    return user; 
  } 
  @RequestMapping("/test2") 
  public String view2() { 
    return "{\"id\" : 1}"; 
  } 
} 

 其实现就是在@@RestController中加入@ResponseBody:

Java代码 

@org.springframework.stereotype.Controller 
@org.springframework.web.bind.annotation.ResponseBod 
public @interface RestController { 
} 

这样当你开发Rest服务器端的时候,spring-mvc配置文件需要的代码极少,可能就仅需如下一行:

Java代码  

<context:component-scan base-package="com.bjpowernode.spring4"/> 
<mvc:annotation-driven/>  

2、mvc:annotation-driven配置变化

统一风格;将 enableMatrixVariables改为enable-matrix-variables属性;将ignoreDefaultModelOnRedirect改为ignore-default-model-on-redirect。

3、提供AsyncRestTemplate用于客户端非阻塞异步支持。

3.1、服务器端

Java代码  

@RestController 
public class UserController { 
  private UserService userService; 
  @Autowired 
  public UserController(UserService userService) { 
    this.userService = userService; 
  } 
  @RequestMapping("/api") 
   public Callable<User> api() { 
    System.out.println("=====hello"); 
    return new Callable<User>() { 
      @Override 
      public User call() throws Exception { 
        Thread.sleep(10L * 1000); //暂停两秒 
        User user = new User(); 
        user.setId(1L); 
        user.setName("haha"); 
        return user; 
      } 
    }; 
  } 
} 

非常简单,服务器端暂停10秒再返回结果(但是服务器也是非阻塞的)。具体参考我github上的代码。 

3.2、客户端

Java代码  

public static void main(String[] args) { 
  AsyncRestTemplate template = new AsyncRestTemplate(); 
  //调用完后立即返回(没有阻塞) 
  ListenableFuture<ResponseEntity<User>> future = template.getForEntity("http://localhost:9080/spring4/api", User.class); 
  //设置异步回调 
  future.addCallback(new ListenableFutureCallback<ResponseEntity<User>>() { 
    @Override 
    public void onSuccess(ResponseEntity<User> result) { 
      System.out.println("======client get result : " + result.getBody()); 
    } 
    @Override 
    public void onFailure(Throwable t) { 
      System.out.println("======client failure : " + t); 
    } 
  }); 
  System.out.println("==no wait"); 
} 

 此处使用Future来完成非阻塞,这样的话我们也需要给它一个回调接口来拿结果; Future和Callable是一对,一个消费结果,一个产生结果。调用完模板后会立即返回,不会阻塞;有结果时会调用其回调。

 AsyncRestTemplate默认使用SimpleClientHttpRequestFactory,即通过java.net.HttpURLConnection实现;另外我们也可以使用apache的http components;使用template.setAsyncRequestFactory(new HttpComponentsAsyncClientHttpRequestFactory());设置即可。

另外在开发时尽量不要自己注册如:

Java代码 

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 

尽量使用

Java代码  

<mvc:annotation-driven/>  

它设计的已经足够好,使用子元素可以配置我们需要的配置。

且不要使用老版本的:

Java代码  

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 

否则可能得到如下异常:

写道

Circular view path [login]: would dispatch back to the current handler URL [/spring4/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

总结

以上所述是小编给大家介绍的spring4新特性之web开发增强,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!


参考资料

相关文章

  • Spring Cloud Stream异常处理过程讲解

    发布:2020-03-25

    这篇文章主要介绍了Spring Cloud Stream异常处理过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • Springboot调整接口响应返回时长详解(解决响应超时问题)

    发布:2023-04-22

    当后端对于数据量较大的处理或是某些耗时的操作时,需要先对请求接口的请求进行响应,下面这篇文章主要给大家介绍了关于Springboot调整接口响应返回时长(解决响应超时问题)的相关资料,需要的朋友可以参考下


  • springMVC使用ajaxFailUpload上传图片的实例讲解

    发布:2019-06-04

    这篇文章主要介绍了springMVC使用ajaxFailUpload上传图片的相关知识,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下


  • SpringBoot加载读取配置文件过程详细分析

    发布:2023-04-25

    在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一、灵活的管理服务配置信息。所以本文将为大家总结一下SpringBoot加载配置文件的常用方式,需要的可以参考一下


  • SpringBoot自动装配之Condition深入讲解

    发布:2023-03-10

    @Conditional表示仅当所有指定条件都匹配时,组件才有资格注册。该@Conditional注释可以在以下任一方式使用:作为任何@Bean方法的方法级注释、作为任何类的直接或间接注释的类型级别注释@Component,包括@Configuration类、作为元注释,目的是组成自定义构造型注释


  • Maven工程搭建spring boot+spring mvc+JPA的步骤详解

    发布:2019-11-15

    本篇文章主要介绍了Maven工程搭建spring boot+spring mvc+JPA的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • Spring注解@Import原理解析

    发布:2023-03-25

    这篇文章主要为大家介绍了Spring注解@Import原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • SpringMVC中常用参数校验类注解使用示例教程

    发布:2022-10-20

    给网友朋友们带来一篇关于Spring MVC的教程,这篇文章主要介绍了SpringMVC中常用参数校验类注解使用示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


网友讨论