java开放接口采用RestTemplate获取数据


前言

公司WMS系统与ERP系统、MES系统作对接
需要开放WMS系统接口,暂时没有做安全验证,直接跳过shirFilter验证


提示:以下是本篇文章正文内容,下面案例可供参考

一、WMS系统开放接口

1.ShiroConfig中添加需要开放的接口 filterMap.put("/api/base/**", “anon”)

  • filterMap.put("/api/base/**", “anon”)——会放开api/base/下面所有的接口,不进入验证

代码如下(示例):


/**
 * @ClassName ShiroConfig
 * @Description TODO
 * @Author Gao
 * @Date 2021/11/16 16:06
 * @Version 1.0
 **/
@Configuration
public class ShiroConfig {

    @Bean
    public DefaultWebSessionManager sessionManager(){
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionValidationSchedulerEnabled(false);
        sessionManager.setSessionIdUrlRewritingEnabled(false);
        return sessionManager;
    }

    @Bean("securityManager")
    public SecurityManager securityManager(Oauth2Realm oAuth2Realm, SessionManager sessionManager) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(oAuth2Realm);
        securityManager.setSessionManager(sessionManager);
        securityManager.setRememberMeManager(null);
        return securityManager;
    }

    @Bean("shiroFilter")
    public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        //oauth过滤
        Map<String, Filter> filters = new HashMap<>();
        filters.put("oauth2", new Oauth2Filter());
        shiroFilter.setFilters(filters);
        Map<String, String> filterMap = new LinkedHashMap<>();
        filterMap.put("/webjars/**", "anon");
        filterMap.put("/druid/**", "anon");
        filterMap.put("/login", "anon");
        filterMap.put("/swagger/**", "anon");
        filterMap.put("/v2/api-docs", "anon");
        filterMap.put("/doc.html", "anon");
        filterMap.put("/swagger-resources/**", "anon");
        filterMap.put("/modeler/**", "anon");
        filterMap.put("/flowable/**", "anon");
        filterMap.put("/app/rest/**", "anon");
        filterMap.put("/views/**", "anon");
        filterMap.put("/captcha", "anon");
        filterMap.put("/favicon.ico", "anon");
        filterMap.put("/ureport/**", "anon");
        filterMap.put("/pay/alipay/**", "anon");
        filterMap.put("/api/base/**", "anon");
        filterMap.put("/api/in/**", "anon");
        filterMap.put("/api/out/**", "anon");
        filterMap.put("/**", "oauth2");
        shiroFilter.setFilterChainDefinitionMap(filterMap);
        return shiroFilter;
    }

    @Bean("lifecycleBeanPostProcessor")
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
        advisor.setSecurityManager(securityManager);
        return advisor;
    }

}

2.对外开放接口层

  • @RequestMapping(“api/base”) 对应 filterMap.put("/api/base/**", “anon”)

代码如下(示例):

/**
 * @ClassName WmsAdminApiController
 * @Description Api开放接口:物料模块  TODO 1,暂时没有考虑安全问题 2,数据对接字段等还需要做进一步确定
 * @Author Gao
 * @Date 2021/11/16 17:02
 * @Version 1.0
 **/
@RestController
@RequestMapping("api/base")
@Api(tags = "Api:仓库模块")
public class ApiMaterialController {

    @Autowired
    private MaterialCategoryService materialCategoryService;

    @Autowired
    private ApiMaterialService apiMaterialService;

    @PostMapping("/saveMaterial")
    @ApiOperation("新增物料")
    @LogOperation("新增物料")
    public Result saveMaterial(@RequestBody ApiMaterialDto dto) {
        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
        String materialCategoryName = materialCategoryService.getMaterialCategoryNameByCode(dto.getMaterialCategoryCode());
        String code = OrderNoSerialUtil.generateCode(OrderTypeEnum.物料编码);
        dto.setCode(code);
        dto.setMaterialCategoryName(materialCategoryName);
        apiMaterialService.save(dto);
        return new Result();
    }


    @PutMapping("/updateMaterial")
    @ApiOperation("修改物料")
    @LogOperation("修改物料")
    public Result updateMaterial(@RequestBody ApiMaterialDto dto) {
        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
        if (null != dto.getId()) {
            String materialCategoryName = materialCategoryService.getMaterialCategoryNameByCode(dto.getMaterialCategoryCode());
            dto.setMaterialCategoryName(materialCategoryName);
            apiMaterialService.update(dto);
            return new Result();
        }
        return new Result().error("修改物料失败");
    }

    @GetMapping("/getMaterialInfo/{id}")
    @ApiOperation("获取物料详细信息")
    public ApiMaterialDto getMaterialInfo(@PathVariable("id") Long id) {
        ApiMaterialDto data = apiMaterialService.get(id);
        return data;
    }
}

二、测试工程来获取WMS系统对外开放接口数据

1.DTO传输层

  • 需要接收的数据需要对应上

代码如下(示例):

/**
 * @ClassName MaterialDTO
 * @Description TODO
 * @Author 码头土夫子_Gao
 * @Date 2021/11/16 10:03
 * @Version 1.0
 **/
@Data
public class MaterialDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;

    private String auxprop;

    private String basicUnit;

    private String code;

    private String color;

    private Integer enableStatus;

    private String name;

    private String producingArea;

    private String materialCategoryCode;

    private String materialCategoryName;

    private String specifications;

    private String supplierCode;

    private String supplierName;

    private BigDecimal volume;

    private String warehouseCode;

    private String commodityCode;

    private BigDecimal weight;

    private Long creator;

    private String creatorName;

}

2.测试类

  • 使用Spingboot封装好的RestTemplate来获取外部接口数据

代码如下(示例):

/**
 * @ClassName Get
 * @Description TODO
 * @Author 码头土夫子_Gao
 * @Date 2021/11/18 14:49
 * @Version 1.0
 **/
public class Get {

    RestTemplate restTemplate = new RestTemplate();

    @Test
    public void TestDoGet() {
        //本地对外开放得接口
        String url = "http://localhost:8081/njp-wms-api/api/base/getMaterialInfo/1458624486038405121";
        MaterialDTO data = restTemplate.getForObject(url, MaterialDTO.class);
        System.out.println("查询物料返回结果:" + data);
    }
}

3.测试结果

在这里插入图片描述


总结

上述内容,讲述了如何开放系统接口,不进入验证,第三方如何获取开放接口的数据
关于安全问题,后续会进一步更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值