Spring Cloud注解的使用

本文探讨了SpringBoot框架下RESTful API的设计规范,包括使用RequestParam与RequestBody注解的区别,以及如何通过GetMapping和PostMapping等注解来指定HTTP请求方法。同时,详细解释了如何设置produces属性来确保API返回JSON格式数据。
前言:编程规范的重要性不言而喻,之前我们接口的传参都是使用Map的形式,随着公司的发展,以及慢慢的规范的建立,我们要求传参的时候尽量使用对象作为入参,Spring boot强制返回的的数据是JSON形式的
  1. RequestParam与RequestBody:RequestParam注解接收的参数是来自于request header中,即请求头,也就是在url中,格式为xxx?username=123&password=456,而RequestBody注解接收的参数则是来自于requestBody中,即请求体中。包含RequestBody的接口,前端传递的request header Content-Type必须是JSON串。
    如果接口是如下的形式
@RequestMapping(value = "/getMemberList")
public BaseResponseObject getMemberList(@RequestBody SearchMember searchMember) {
	BaseResponseObject baseResponseObject = new BaseResponseObject(Boolean.FALSE, "", "");
}

前端调用的时候只能使用POST的请求方式

{"visitSiteId":25,"firstResult":0,"maxResult":20,"sortType":2,"memberName":"pppp ppp"}

因为这是一个获取列表的请求,一般我们使用的是GET请求,但是GET请求无法传递JSON对象,只能传递键值对的JSON字符串,为了兼容之前的,我只能做个修改

@RequestMapping(value = "/getMemberList")
public BaseResponseObject getMemberList(SearchMember searchMember) {
	BaseResponseObject baseResponseObject = new BaseResponseObject(Boolean.FALSE, "", "");
}

这样前端调用的时候可以使用/getMemberList?visitSiteId=24&firstResult=0&maxResult=20&memberName=pppp ppp

  1. 关于RequestMapping、PostMapping、GetMapping,后续两个是第一个简写的形式,平时用RequestMapping喜欢@RequestMapping(value = "/getNodeMapList", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON),如果使用GetMapping就可以像这样@GetMapping(value = "/getNodeMapList",produces = MediaType.APPLICATION_JSON )
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {

	@AliasFor(annotation = RequestMapping.class)
	String name() default "";
	@AliasFor(annotation = RequestMapping.class)
	String[] value() default {};
	@AliasFor(annotation = RequestMapping.class)
	String[] path() default {};
	@AliasFor(annotation = RequestMapping.class)
	String[] params() default {};
	@AliasFor(annotation = RequestMapping.class)
	String[] headers() default {};
	@AliasFor(annotation = RequestMapping.class)
	String[] consumes() default {};
	@AliasFor(annotation = RequestMapping.class)
	String[] produces() default {};

}

PS:注意到我在RequestMapping和GetMapping都设定了produces的值,这里的目的是为了把返回值的类型定义为JSON,就是在response header中加上Content-Type: application/json;charset=UTF-8,如果没有这个值的话,默认是Content-Type: application/xhtml+xml;charset=UTF-8

### 回答1: Spring Cloud 是一个基于 Spring Boot 的开发工具包,它为开发人员提供了一系列的注解,用于简化分布式系统的开发。其中常用的注解包括 @EnableDiscoveryClient、@EnableFeignClients、@EnableCircuitBreaker 等。这些注解可以帮助开发人员快速搭建分布式系统,提高开发效率。 ### 回答2: Spring Cloud是一种开源的微服务架构开发框架,它是基于Spring Boot开发的,主要用于简化分布式系统的开发。在Spring Cloud中,注解在整个框架中扮演了重要的角色。 首先,注解Spring Cloud中用于标记和定义各种组件和功能。通过使用注解,我们可以告诉框架哪些类或方法是服务提供者、服务消费者或者是应用配置的,以便框架能够自动地进行相应的处理。例如,@EnableDiscoveryClient注解用于启用服务注册与发现功能,@EnableFeignClients注解用于启用Feign客户端功能。 其次,注解还可以用于实现各种控制和配置。在Spring Cloud中,我们可以通过注解来定制各种配置项,如超时时间、负载均衡策略、熔断器的配置等。例如,@HystrixCommand注解用于标记一个方法是一个熔断器的降级方法,@LoadBalanced注解用于标记一个RestTemplate类是一个负载均衡的客户端。 此外,注解还可以用于实现不同组件之间的通信。通过使用注解,我们可以声明不同组件之间的依赖关系,以便框架能够自动地进行组件的装配和注入。例如,@Autowired注解用于将一个服务注入到另一个服务中,@Value注解用于将配置属性注入到一个类中。 总而言之,Spring Cloud中的注解在框架的开发和使用过程中起到了非常重要的作用。它们不仅简化了开发人员的工作,还提供了灵活的配置和控制的能力,进一步提高了分布式系统的开发效率和可维护性。 ### 回答3: Spring CloudSpring Framework的一个子项目,用于构建分布式系统的开发工具集。它提供了一系列的注解,用于简化开发者在构建微服务架构中的工作。 1. `@EnableDiscoveryClient`:该注解用于启动服务发现功能,通过与服务注册中心进行交互,可以将服务注册到注册中心,以供其他服务进行调用。 2. `@EnableFeignClients`:该注解用于启动Feign客户端功能,Feign是一个声明式的Web服务客户端,可以帮助开发者进行服务之间的通信。 3. `@EnableHystrix`:该注解用于启动Hystrix断路器功能,Hystrix是一种容错和延迟容忍库,可以帮助开发者处理分布式系统中的故障和高延迟。 4. `@EnableCircuitBreaker`:该注解也用于启动断路器功能,它与Hystrix一起使用,用于在系统发生故障时进行容错处理和回退操作。 5. `@EnableZuulProxy`:该注解用于启动Zuul代理功能,Zuul是一个在微服务架构中提供动态路由、负载均衡和安全过滤的网关服务。 6. `@EnableConfigServer`:该注解用于启动配置中心功能,配置中心可以帮助开发者集中管理和配置微服务中的各种配置。 这些注解可以帮助开发者快速搭建和配置分布式系统中的各种组件和功能,并且能够与Spring Cloud中的其他组件无缝集成,提供了更方便和简化的开发体验。同时,通过注解的方式,开发者可以更加灵活地选择需要使用的组件和功能,提高了可定制性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值