SpringCloud 之 Fegin跨服务调用

	最近在做一个微服务的项目,项目中用的Feign来做服务件调用,由于自己也是第一次使用,记录一下自己遇到的坑。

启动类加入注解:

@EnableRyFeignClients

引入依赖:

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

客户端接口类:

package com.dlzx.pfservercar.client;

import com.dlzx.common.core.web.domain.AjaxResult;
import com.dlzx.common.core.web.page.TableDataInfo;
import com.dlzx.pfservercar.domain.DVacation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Component
@FeignClient(value = "pfserver-person") //注册中心服务的名字
//@FeignClient(value = "pfserver-person",url = "http://localhost:9500/") //本地调试
public interface PersonClient {


    /**
     * App 考勤-驾驶员请假列表
     * */
    @RequestMapping(path = "/vacation/E01VacationList",method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
    public TableDataInfo E01VacationList(@RequestBody DVacation dVacation);

    /**
     * App 考勤-请假详情(区分四种状态)
     */
    @RequestMapping(path = "/vacation/E02VacationDetail")
    public AjaxResult E02VacationDetail(@RequestParam("id") String id);
}

消费端Controller:

/**
 * 驾驶员-考勤Controller
 * 
 * @author dcl
 * @date 2020-11-30
 */
@RestController
@RequestMapping("/driver-api/vacation")
public class DVacationController extends BaseController
{
    @Autowired
    private PersonClient personClient;

    /**
     * App 考勤-驾驶员请假列表
     */
    @RequestMapping("/E01VacationList")
    @ResponseBody
    @Log(title = "考勤-驾驶员请假列表")
    public TableDataInfo list(@RequestBody DVacation dVacation)
    {
        return personClient.E01VacationList(dVacation);
    }

服务提供端Controller:

    /**
     * App 考勤-驾驶员请假列表
    * */
    @RequestMapping(path = "/E01VacationList",method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
    @ResponseBody
    @Log(title = "App 考勤-驾驶员请假列表")
    public TableDataInfo vacationList(@RequestBody DVacation dVacation)
    {
        startPage(dVacation.getPageNum(),dVacation.getPageSize());
        LoginDriver loginDriver = driverTokenService.getLoginDriver();
        dVacation.setDriverId(loginDriver.getUserid()+"");
        return getDataTable(dVacationService.queryAppVacationList(dVacation));
    }

一开始都还好好的,当传入多个@RequestParam参数时,突然遇到一个错误“Required String parameter ‘XXX’ is not present” 结果是因为我传入的参数有一个是空的,就会导致这个报错,如果参数可能为空的时候避免报错,可以参考我的。
将@RequestParam(“type”) 改为
@RequestParam(value = “type”,required = false)
可以解决此问题。

/**
     * 管理员公共接口-消息节点
     */
    @RequestMapping(path = "/administrator-app/msg/addAdminMsg",method = RequestMethod.POST)
    public AjaxResult addAdminMsg(@RequestParam(value = "type",required = false)Long type, @RequestParam(value = "relationId",required = false)String relationId,
                                  @RequestParam(value = "title",required = false)String title, @RequestParam(value = "content",required = false)String content);

这个参数是 required 确定在 API 中的参数中是否必须要输出参数。在默认情况下为 true,你可以设置这个参数为 false。如果你设置的参数为 true,但是在提交参数的时候没有提交这个参数,你的 API 将会返回一个异常。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值