第八节 微服务部分追加

2018-08-31  本文已影响11人  勃列日涅夫
  1. spring boot test测试框架的简单使用
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

使用类似如下:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserControllerIntegrationTests {

    private final RestTemplate restTemplate = new RestTemplate();
    //Required to Generate JSON content from Java objects
    public static final ObjectMapper objectMapper = new ObjectMapper();

    @Value("${local.server.port}")
    private int port;

    /**
     * Test the GET /v1/user/{id} API
     */
    @Test
    public void testGetById() {
        //API call
        Map<String, Object> response
                = restTemplate.getForObject("http://localhost:" + port + "/v1/user/1", Map.class);
        assertNotNull(response);

        //Asserting API Response
        String id = response.get("id").toString();
        assertNotNull(id);
        assertEquals("1", id);
        String name = response.get("name").toString();
        assertNotNull(name);
        assertEquals("User Name 1", name);
        boolean isModified = (boolean) response.get("isModified");
        assertEquals(false, isModified);
    }
}
  1. 可以为每个项目 配置异常处理
   <dependency>
            <groupId>com.xzg</groupId>
            <artifactId>online-table-reservation-common</artifactId>
            <version>v1</version>
        </dependency>

实现方式有两种方式,其一直接使用AOP自己去拦截controler实现
其二使用spring提供的@RestControllerAdvice 和 @ExceptionHandler实现
第一种实现方式下面是一种xml配置:

<!-- aop -->
<aop:aspectj-autoproxy />
<beans:bean id="controllerAop" class="xxx.common.aop.ControllerAOP" />
<aop:config>
<aop:aspect id="myAop" ref="controllerAop">
<aop:pointcut id="target"
expression="execution(public xxx.common.beans.ResultBean *(..))" />
<aop:around method="handlerControllerMethod" pointcut-ref="target" />
</aop:aspect>
</aop:config>

也可以使用javaconfig

//公共切点定义
@Aspect
public class AopArchitecture {

  //业务服务是定义在服务接口中的任意方法的执行。
  @Pointcut("execution(* com.xxx.aop..service.*.*(..))")
  public void businessService() {}
}

//声明通知(前置通知  后置通知 环绕通知 ) 具体根据实现
例如环绕
@Aspect
public class AroundExample {
//引入前面的的切点
    @Around("com.xxx.AopArchitecture.businessService()")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        // start  todo
        Object retVal = pjp.proceed();
        // stop  todo
        return retVal;
    }
}
上一篇下一篇

猜你喜欢

热点阅读