个人博客网站,工程装修,做网站如何与网络公司沟通,网站专栏建设amazon-mws-java-sdk亚马逊MWS服务的Java-SDK封装安装在pom.xml中添加依赖top.guyi.amazonAmazon-MWS-SDK1.0.0.1依赖放在nexus私服中#xff0c;并没有上传到中央仓库#xff0c;所以请在pom.xml中加入仓库配置guyi-maple-nexushttp://nexus.guyi-maple.space/nexus/content…amazon-mws-java-sdk亚马逊MWS服务的Java-SDK封装安装在pom.xml中添加依赖top.guyi.amazonAmazon-MWS-SDK1.0.0.1依赖放在nexus私服中并没有上传到中央仓库所以请在pom.xml中加入仓库配置guyi-maple-nexushttp://nexus.guyi-maple.space/nexus/content/groups/public/本项目基于Spring-Boot依赖添加后会自行进行相关配置你需要做的只是在application.properties中给出亚马逊MWS的开发者信息如下application.propertiesguyi.amazon.mws.accessKey guyi.amazon.mws.secretKey guyi.amazon.mws.server https://mws.amazonservices.jp #mws端点guyi.amazon.mws.sellerId guyi.amazon.mws.marketplaceId guyi.amazon.mws.charset Shift_JIS #编码关于亚马逊MWS端点请参见 亚马逊MWS服务端点列表编码设置用于数据上传接口中具体编码信息请参见 SubmitFeed Content-Type开发者信息如果你需要同时操作多个亚马逊商城且使用不同的开发者信息请实现接口 AmazonConfigProvider然后将你的实现类放置到Spring容器中AmazonConfigProvider接口中的version方法返回当前开发者信息的版本名称String version()在使用时可使用此版本名称进行切换ResourceAmazonConfigFactory factoryfactory.currentVersion(version) //设置当前线程下使用的开发者信息factory.current() //获取当前线程下的开发者信息factory.globalVersion(version) //设置全局开发者信息factory.globalVersion() //获取全局开发者信息开发者信息版本的优先级为Thread(当前线程) - global(全局) - default(application.properties中的配置)接口调用新增接口调用流程SuperAmazonClient Client接口泛型泛型 C 对应亚马逊提供的Java客户端中的config类如MarketplaceWebServiceProductsConfigMarketplaceWebServiceConfig等泛型 E 对应亚马逊提供的Java客户端中的Client类如MarketplaceWebServiceProductsClientMarketplaceWebServiceClient等新增Client类需要自己新增Client类时请实现接口 SuperAmazonClient如下示例实现类ProductsClient.groovypackage top.guyi.amazon.mws.client.implimport com.amazonservices.mws.products.MarketplaceWebServiceProductsClientimport com.amazonservices.mws.products.MarketplaceWebServiceProductsConfigimport top.guyi.amazon.mws.client.SuperAmazonClientimport top.guyi.amazon.mws.conf.AmazonConfigProvider/*** Created by 古逸 on 2017-05-26.*/class ProductsClient implements SuperAmazonClient {OverrideMarketplaceWebServiceProductsClient create(AmazonConfigProvider provider) {MarketplaceWebServiceProductsConfig config this.newConfig(provider)return this.createByConfig(provider,config)}OverrideMarketplaceWebServiceProductsClient createByConfig(AmazonConfigProvider provider, MarketplaceWebServiceProductsConfig config) {MarketplaceWebServiceProductsClient client new MarketplaceWebServiceProductsClient(provider.accessKey(),provider.secretKey(),config)return client}OverrideMarketplaceWebServiceProductsConfig newConfig(AmazonConfigProvider provider) {MarketplaceWebServiceProductsConfig config new MarketplaceWebServiceProductsConfig()config.serviceURL provider.server()return config}}SuperRequestPackers Request基类泛型泛型 T 表示实现类本身如实现类名为GetMatchingProductForIdPackers那么泛型T 就为 GetMatchingProductForIdPackers泛型 R 对应亚马逊Java客户端中的请求如GetMatchingProductForIdRequestGetLowestOfferListingsForASINRequestGetLowestOfferListingsForSKURequest等泛型 P 对应Response类及响应的处理有关于Respose类的介绍请参见下方解释新增Request类要新增Request类请实现基类SuperRequestPackers实现类中的 method 方法返回当前请求调用的亚马逊哪一个接口,首字母小写String method()亚马逊接口列表请参见 亚马逊MWS服务文档当请求中有必须的参数时建议添加must方法如果没有则不需要示例代码如下package top.guyi.amazon.mws.request.impl.productsimport com.amazonservices.mws.products.model.GetMatchingProductForIdRequestimport com.amazonservices.mws.products.model.IdListTypeimport top.guyi.amazon.mws.client.SuperAmazonClientimport top.guyi.amazon.mws.client.impl.ProductsClientimport top.guyi.amazon.mws.request.SuperRequestPackersimport top.guyi.amazon.mws.response.impl.products.GetMatchingProductForIdHandler/*** Created by 古逸 on 2017-06-01.*/class GetMatchingProductForIdPackers extends SuperRequestPackers{private GetMatchingProductForIdRequest requestOverrideClass extends SuperAmazonClient clientClass() {return ProductsClient.class}OverrideString method() {return getMatchingProductForId}GetMatchingProductForIdPackers must(String idType,List idList){this.amazonRequest().idType idTypeIdListType list new IdListType()list.id idListthis.amazonRequest().idList listreturn this}OverrideGetMatchingProductForIdRequest amazonRequest() {if(request null){request new GetMatchingProductForIdRequest()request.sellerId this.config().current().sellerId()request.marketplaceId this.config().current().marketplaceId()}return request}}SuperResponseHandler 响应基类泛型泛型 P 对应亚马逊Java客户端中的响应如GetMatchingProductForIdResponseGetLowestOfferListingsForASINResponseGetLowestPricedOffersForASINResponse等泛型 R 表示Request类关于Request类请参见上方的解释新增Response类新增Response类需要实现基类 SuperResponseHandler实现类中的 pattern 方法表示处理返回的XML数据请返回EntityData实体类的数组EntityData实体类中包含数据处理的正则表达式与Lambda表达式如果返回 null 表示不进行处理示例代码如下package top.guyi.amazon.mws.response.impl.reportimport com.amazonservices.mws.products.model.GetMatchingProductRequestimport com.amazonservices.mws.products.model.GetMatchingProductResponseimport top.guyi.amazon.mws.response.SuperResponseHandlerimport top.guyi.amazon.mws.response.entity.product.Product/*** Created by 古逸 on 2017-05-26.*/class GetMatchingProductHandler extends SuperResponseHandler{List childs new LinkedList()Product parentOverrideString getXML(GetMatchingProductResponse response) {return response.toXML()}OverrideList pattern() {String xml this.response().toXML()if(xml.contains(ns2:VariationChild)){return [EntityData.create(/(.*?)(.*?)/,{line-Product product new Product()product.marketplaceId line[1]product.asin line[2]childs.add(product)})]}else if(xml.contains(VariationParent)){return [EntityData.create(/(.*?)(.*?)/,{line-parent new Product()parent.marketplaceId line[1]parent.asin line[2]})]}}}注意新增的Client、Request、Response实现类如果要使其生效都需要放入到Spring的容器中接口调用方式接口调用时每一次调用请新建Request对象此对象没有做单例处理请尽量将其作为局部变量使用如GetMatchingProductPackers packers new GetMatchingProductPackers()GetMatchingProductHandler response packers.must(B00S7W8TUQ).invok()println(response.childs)println(response.parent)println(response.getXML())println(response.response())Request类中集成了自定义参数的配置方式如下示例GetMatchingProductPackers packers new GetMatchingProductPackers()packers.customize {request-ASINListType list new ASINListType()list.ASIN [B00S7W8TUQ]request.ASINList list}GetMatchingProductHandler response packers.invok()println(response.childs)println(response.parent)println(response.getXML())println(response.response())Request类中集成了自定义开发者信息的配置方式此配置方式只在当前的Request对象中生效如下示例GetMatchingProductPackers packers new GetMatchingProductPackers()packers.customizeAmazonConfig {config-config.serviceURL https://mws.amazonservices.jpconfig.connectionTimeout 3000}GetMatchingProductHandler response packers.must(B00S7W8TUQ).invok()println(response.childs)println(response.parent)println(response.getXML())println(response.response())Request类支持Builder设计模式如下示例println(new GetMatchingProductPackers().must(B00S7W8TUQ).invok().parent())println(new GetMatchingProductPackers().customize({request-ASINListType list new ASINListType()list.ASIN [B00S7W8TUQ]request.ASINList list}).invok().parent())在Request中更改开发者信息的版本当你需要在Request中更改开发者信息版本是可调用 version 方法GetMatchingProductPackers packers new GetMatchingProductPackers()packers.version(Japan)此方式设置的开发者信息版本优先级为线程即在当前线程中生效