互联网公司的近一个月总结

互联网公司的近一个月总结

一、遇到的第一个问题,同步数据,调用别人的接口.

当时都不知所措!!!
第一个问题是,接口长啥样??? 第二个问题是怎么调用别人的接口???
接下来在公司友善的同事的帮助下走过了艰难的第一步,看到了接口长什么样!
首先看前台的swagger2页面:
在这里插入图片描述
又看到了后端代码的类目:
在这里插入图片描述
紧接着我找到了controller层,但是发现每个功能都是聚合的项目;像这样
在这里插入图片描述
此处听同事讲,分为consumer层(消费者)简称C层和provider层(供应者)简称P层以及api层;他们之间的调用关系是,C层对外暴露接口,然后通过路径调用具体的方法,api层提供接口调用P层的服务;P层不对外暴露.
下面看看每一层的结构
首先API层(以及我看不懂的顶层)
base放的是日期工具;dto是传入的实体(入参);enums枚举类;service接口类;vo返回的实体(出参);
在这里插入图片描述
下面是C层
在这里插入图片描述
config是
(@Configuration
@DisconfFile(filename = “app_config.properties”)
public class AppConfig {})类应该是读取的文件配置;这里我们有一个:分布式配置管理平台
在这里插入图片描述
以及Feign,服务间调用的东西;
在这里插入图片描述
Controller还是那个Controller,哈哈…截图看看这里有几个注解是swagger的
比如@api,@Apioperration,@Apiimplicitparam;是为了接口描述的
在这里插入图片描述
exception文件夹放了一些异常
其中有(重写feign捕获的异常-得到编码与错误描述-重新抛出至全局异常处理),以及自定义异常
在这里插入图片描述
util文件夹,放了一个工具类
在这里插入图片描述
然后是一个启动类;
在这里插入图片描述
接下来这是P层
在这里插入图片描述
下面开始我需要做的事情,切换联系人取数的接口;(原来从ework取,现在改为从digger取)
首先是C层的controller(分别涉及的是修改客户下联系人,增加客户下联系人,查询客户下联系人列表,以及详情)

@Api(description = "ework接口")
@RestController
public class EworkController {
	@Resource
	private EworkApi eworkApi;
	
	// 修改客户联系人
	@ApiOperation(value = "编辑联系人API调用DIGGER", httpMethod = "PUT", notes = "编辑联系人", response = String.class)
	@ApiImplicitParam(name = "eworkContactsDto", value = "编辑联系人", required = true, paramType = "body", dataType = "EworkContactsDto")
	@PutMapping(value = "/contacts")
	public ResponseEntity<String> updateSalesContact(@RequestBody EworkContactsDto eworkContactsDto) {
		return eworkApi.updateSalesContact(eworkContactsDto);
	}

	// 添加客户联系人
	@ApiOperation(value = "新增联系人API调用DIGGER", httpMethod = "POST", notes = "新增联系人", response = String.class)
	@ApiImplicitParam(name = "eworkContactsDto", value = "新增联系人", required = true, paramType = "body", dataType = "EworkContactsDto")
	@PostMapping(value = "/contacts")
	public ResponseEntity<String> addContact(@RequestBody EworkContactsDto eworkContactsDto) {
		return eworkApi.addContact(eworkContactsDto);
	}

	// 查询客户联系人
	@ApiOperation(value = "获取客户下联系人API调用DIGGER", httpMethod = "POST", notes = "获取客户下联系人", response = ContactsDiggerVo.class)
	@ApiImplicitParam(name = "eworkCustomerIdDto", value = "获取客户下联系人", required = true, paramType = "body", dataType = "EworkCustomerIdDto")
	@PostMapping(value = "/contacts/list")
	public Object getContactsList(@RequestBody EworkCustomerIdDto eworkCustomerIdDto) {
		try {
			return eworkApi.getContactsList(eworkCustomerIdDto);
		} catch (Exception e) {
			return new Object[] {};
		}
	}

	// 客户联系人详细
	@ApiOperation(value = "获取联系人详细API调用DIGGER", httpMethod = "GET", notes = "获取联系人详细", response = String.class)
	@ApiImplicitParams({
			@ApiImplicitParam(name = "contactId", value = "联系人ID", paramType = "path", dataType = "Long", defaultValue = "1000000000100160") })
	@GetMapping(value = "/contacts/{contactId}")
	public Object getcontactmgslist(@PathVariable("contactId") Long contactId) {
		try {
			return eworkApi.getcontactmgslist(contactId);
		} catch (Exception e) {
			return new Object();
		}
	
	}

请注意上面的注解
首先是引入的
@Api(description = “ework接口”) swagger上最顶层的说明
在这里插入图片描述
接下来是@RestController
@RestController此处注解要连同@Controller做一个区别,百度后个人总结为(@RestController返回的是json数据并且不需要在方法上加@ResponseBody;@Controller相反,需要在方法上加@ResponseBody,才能返回json数据,不加@ResponseBody返回的就是jsp或html页面;)

@Resource注解,此处要去百度了一下
@Resource和@Autowired的区别:我百度后得到(@Resource的作用相当于@Autowired,只不过@Autowired按照byType(类型)自动注入,如上面未指定,就按照反射机制使用byName(名字)自动注入策略;@Resource有两个属性name和type指定的话会分别按照名字或类型去装配bean进行注入)。

下面说发现的两个以前没见过的注解:(包括之前没见过的swagger2的@Api)
@Api(description = “ework接口”)
@ApiOperation(value = “编辑联系人API调用DIGGER”, httpMethod = “PUT”, notes = “编辑联系人”, response = String.class)
@ApiImplicitParam(name = “eworkContactsDto”, value = “编辑联系人”, required = true, paramType = “body”, dataType = “EworkContactsDto”)
@ApiOperation
后来百度后得:
@ApiOperation不是spring自带的注解是swagger里的 com.wordnik.swagger.annotations.ApiOperation;
实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。也就是自动抽取API文档。
swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了springMVC框架的无缝集成功能,方便生成restful风格的接口文档,同时,swagger-ui还可以测试spring restful风格的接口功能

协议集描述       @Api               用在Conntroller类上

非对象参数集 @ApilmplicitParams   用在controller方法上
下面是详细说明
@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);
 @ApiImplicitParam注解,此处百度找到,需要跟@ApiImplicitParams连用,但是在本项目中无法说通,或者我理解的不到位.
 由于C层的controller要通过一个EworkApi接口取调用P层的controller,理解上是间接加在P层的controller上

 后来我发现代码中另一种写法
 @ApiImplicitParams({
@ApiImplicitParam(name = “contactId”, value = “联系人ID”, paramType = “path”, dataType = “Long”, defaultValue = “1000000000100160”) })

看来,是可以直接这么写的@ApiImplicitParam  (O(∩_∩)O哈哈~机智如我)
@ApiImplicitParams:用在请求的方法上,包含一组参数说明
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)–> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType=“Integer”
defaultValue:参数的默认值

@ApiImplicitParam(name = “参数名”, value = “参数的汉字说明、解释”, required =参数是否必须传, paramType =参数放在哪个地方 , dataType =参数类型,默认String,其它值dataType=“Integer” )
下来是:我所遇到的一些请求方式,主要是增改查,我没做删除的功能(还是给大家找一个吧).

@PutMapping(value = “/contacts”)
@PostMapping(value = “/contacts”)
@PostMapping(value = “/contacts/list”)
@GetMapping(value = “/contacts/{contactId}”)
@DeleteMapping(value = “sts/objects”)  就长这样;(O(∩_∩)O)
一下是API层的代码基本跟C层是一样的,只是说C层对外暴露,接口controller注解上的swagger描述以C层上的描述显示在页面上而已

    @Api(description = "ework联系人")
    @FeignClient(name = "account-service-provider")
    public interface EworkApi {
    
    	@ApiOperation(value = "编辑联系人API", httpMethod = "PUT", notes = "编辑联系人", response = String.class)
    	@ApiImplicitParam(name = "eworkContactsDto", value = "编辑联系人", required = true, paramType = "body", dataType = "EworkContactsDto")
    	@PutMapping(value = "/contacts")
    	public ResponseEntity<String> updateSalesContact(@RequestBody EworkContactsDto eworkContactsDto);
    
    	@ApiOperation(value = "新增联系人API", httpMethod = "POST", notes = "新增联系人", response = String.class)
    	@ApiImplicitParam(name = "eworkContactsDto", value = "新增联系人", required = true, paramType = "body", dataType = "EworkContactsDto")
    	@PostMapping(value = "/contacts")
    	public ResponseEntity<String> addContact(@RequestBody EworkContactsDto eworkContactsDto);
    
    	@ApiOperation(value = "获取客户下联系人API", httpMethod = "POST", notes = "获取客户下联系人", response =ContactsDiggerVo.class)
    	@ApiImplicitParam(name = "eworkCustomerIdDto", value = "获取客户下联系人", required = true, paramType = "body", dataType = "EworkCustomerIdDto")
    	@PostMapping(value = "/contacts/list")
    	public Object getContactsList(@RequestBody EworkCustomerIdDto eworkCustomerIdDto);
    
    	@ApiOperation(value = "获取联系人详细API", httpMethod = "GET", notes = "获取联系人详细", response = String.class)
    	@ApiImplicitParams({
    			@ApiImplicitParam(name = "contactId", value = "联系人ID", paramType = "path", dataType = "String", defaultValue = "1000000000100160") })
    	@GetMapping(value = "/contacts/{contactId}")
    	public Object getcontactmgslist(@PathVariable("contactId") Long contactId);
}

这个地方没什么可以说的,就类似于接口.
值得说的地方是
@FeignClient(name = “account-service-provider”)这个注解是feign的;
在这里插入图片描述
大部分发现的注解和代码的层次,目前技术水平尚浅暂时仅做词分享。
若有不符请指正,若有侵权请联系,本人做相应处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值