java开发亚马逊mws_GitHub - iotwlw/Amazon-MWS-SDK: 基于亚马逊MWS Java SDK 的封装

amazon-mws-java-sdk

亚马逊MWS服务的Java-SDK封装

安装

在pom.xml中添加依赖

top.guyi.amazon

Amazon-MWS-SDK

1.0.0.1

依赖放在nexus私服中,并没有上传到中央仓库,所以请在pom.xml中加入仓库配置

guyi-maple-nexus

http://nexus.guyi-maple.space/nexus/content/groups/public/

本项目基于Spring-Boot,依赖添加后会自行进行相关配置

你需要做的只是在application.properties中给出亚马逊MWS的开发者信息

如下:

application.properties

guyi.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()

在使用时可使用此版本名称进行切换

@Resource

AmazonConfigFactory factory

factory.currentVersion(version) //设置当前线程下使用的开发者信息

factory.current() //获取当前线程下的开发者信息

factory.globalVersion(version) //设置全局开发者信息

factory.globalVersion() //获取全局开发者信息

开发者信息版本的优先级为:

Thread(当前线程) -> global(全局) -> default(application.properties中的配置)

接口调用

新增接口调用流程

SuperAmazonClient Client接口

泛型

泛型 C 对应亚马逊提供的Java客户端中的config类,如

MarketplaceWebServiceProductsConfig,MarketplaceWebServiceConfig等

泛型 E 对应亚马逊提供的Java客户端中的Client类,如

MarketplaceWebServiceProductsClient,MarketplaceWebServiceClient等

新增Client类

需要自己新增Client类时,请实现接口 SuperAmazonClient,如下示例实现类

ProductsClient.groovy

package top.guyi.amazon.mws.client.impl

import com.amazonservices.mws.products.MarketplaceWebServiceProductsClient

import com.amazonservices.mws.products.MarketplaceWebServiceProductsConfig

import top.guyi.amazon.mws.client.SuperAmazonClient

import top.guyi.amazon.mws.conf.AmazonConfigProvider

/**

* Created by 古逸 on 2017-05-26.

*/

class ProductsClient implements SuperAmazonClient {

@Override

MarketplaceWebServiceProductsClient create(AmazonConfigProvider provider) {

MarketplaceWebServiceProductsConfig config = this.newConfig(provider)

return this.createByConfig(provider,config)

}

@Override

MarketplaceWebServiceProductsClient createByConfig(AmazonConfigProvider provider, MarketplaceWebServiceProductsConfig config) {

MarketplaceWebServiceProductsClient client = new MarketplaceWebServiceProductsClient(provider.accessKey(),provider.secretKey(),config)

return client

}

@Override

MarketplaceWebServiceProductsConfig newConfig(AmazonConfigProvider provider) {

MarketplaceWebServiceProductsConfig config = new MarketplaceWebServiceProductsConfig()

config.serviceURL = provider.server()

return config

}

}

SuperRequestPackers Request基类

泛型

泛型 T 表示实现类本身,如实现类名为GetMatchingProductForIdPackers,那么泛型T 就为 GetMatchingProductForIdPackers

泛型 R 对应亚马逊Java客户端中的请求,如

GetMatchingProductForIdRequest,GetLowestOfferListingsForASINRequest,GetLowestOfferListingsForSKURequest等

泛型 P 对应Response类,及响应的处理,有关于Respose类的介绍,请参见下方解释

新增Request类

要新增Request类,请实现基类SuperRequestPackers

实现类中的 method 方法返回当前请求调用的亚马逊哪一个接口,首字母小写

String method()

亚马逊接口列表,请参见 亚马逊MWS服务文档

当请求中有必须的参数时,建议添加must方法,如果没有,则不需要

示例代码如下

package top.guyi.amazon.mws.request.impl.products

import com.amazonservices.mws.products.model.GetMatchingProductForIdRequest

import com.amazonservices.mws.products.model.IdListType

import top.guyi.amazon.mws.client.SuperAmazonClient

import top.guyi.amazon.mws.client.impl.ProductsClient

import top.guyi.amazon.mws.request.SuperRequestPackers

import top.guyi.amazon.mws.response.impl.products.GetMatchingProductForIdHandler

/**

* Created by 古逸 on 2017-06-01.

*/

class GetMatchingProductForIdPackers extends SuperRequestPackers{

private GetMatchingProductForIdRequest request

@Override

Class extends SuperAmazonClient> clientClass() {

return ProductsClient.class

}

@Override

String method() {

return 'getMatchingProductForId'

}

GetMatchingProductForIdPackers must(String idType,List idList){

this.amazonRequest().idType = idType

IdListType list = new IdListType()

list.id = idList

this.amazonRequest().idList = list

return this

}

@Override

GetMatchingProductForIdRequest amazonRequest() {

if(request == null){

request = new GetMatchingProductForIdRequest()

request.sellerId = this.config().current().sellerId()

request.marketplaceId = this.config().current().marketplaceId()

}

return request

}

}

SuperResponseHandler

响应基类

泛型

泛型 P 对应亚马逊Java客户端中的响应,如

GetMatchingProductForIdResponse,GetLowestOfferListingsForASINResponse,GetLowestPricedOffersForASINResponse等

泛型 R 表示Request类,关于Request类请参见上方的解释

新增Response类

新增Response类,需要实现基类 SuperResponseHandler

实现类中的 pattern 方法表示处理返回的XML数据,请返回EntityData实体类的数组

EntityData实体类中包含数据处理的正则表达式与Lambda表达式

如果返回 null ,表示不进行处理

示例代码如下

package top.guyi.amazon.mws.response.impl.report

import com.amazonservices.mws.products.model.GetMatchingProductRequest

import com.amazonservices.mws.products.model.GetMatchingProductResponse

import top.guyi.amazon.mws.response.SuperResponseHandler

import top.guyi.amazon.mws.response.entity.product.Product

/**

* Created by 古逸 on 2017-05-26.

*/

class GetMatchingProductHandler extends SuperResponseHandler{

List childs = new LinkedList()

Product parent

@Override

String getXML(GetMatchingProductResponse response) {

return response.toXML()

}

@Override

List 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.jp'

config.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')

此方式设置的开发者信息版本,优先级为线程,即在当前线程中生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle数据库中索引会失效的几种情况

创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率。以下几种情况就会导致索引失效: 1. 没有 WHERE 子句 众所周知,添加索引的字段必需要在whe…

JAVA跑步计时器app_坚持跑步神器app

坚持跑步神器app,让坚持不了自己跑步训练的人能够完成自己的训练目标,特色的惩罚系统时刻监督你跑步,不需要GPS就可以实现,非常方便,快来下载吧坚持跑步神器app介绍坚持跑步神器,设定每天跑步多…

java 中 BigDecimal 详解

首先,学习一个东西,我们都必须要带着问题去学,这边我分为 【为什么?】【是什么?】【怎么用?】 【为什么要用BigDecimal?】 首先,我们先看一下,下面这个现象 那为什么会…

三星s7不能运行java_在调试模式下启动时Android应用程序崩溃

当我在 debug 模式下运行时,应用程序崩溃了,但是当我正常运行它时它会起作用 . 我认为附加调试器时会出现问题 .日志:A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() ! GetDebugThread() (Thread::Current()0x…

关于vue-cli3中配置请求跨域的问题

关于vue-cli3中配置请求跨域的问题 根据Vue CLI3官方文档, 需要在vue.config.js文件中配置devServer.proxy选项来解决跨域问题。 1.关于vue.config.js文件 此文件在vue-cli3中不会自动生成,需要手动在项目根目录下创建。 2.配置devServer.proxy选项…

java单元测试内存数据库_基于内存数据库的单元测试

背景:当我们在进行单元测试时,对于关系型数据库(例如mysql)和非关系型数据库(例如redis)的处理,有的小伙伴通过mock的方式制作出假的数据进行测试,有的小伙伴会连到开发环境操作数据库。而连到开发环境,会受到很多限制…

String、StringBuilder、StringBuffer的区别

它们之间的区别: 在我们学习String类的时候,也会学习到StringBuilder和StringBuffer,但是他们之间有什么区别呢? 当然他们在具体的代码实现上、内存分配上以及效率上都有着不同(我这里以JDK8为例)&#xff…

2016年 java_2016年java考试试题及答案

2016年java考试试题及答案简答应用题1.下面程序运行后,可以使用上下左右键移动组件。 补充下画线部分的代码。import java.awt.*;import java.awt.event.*;public class E6 extends Frame implements keyListener{TextField b1;int x,y;E6(){setLayout (new FlowLay…

【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?

String str “a” “b” “c"到底创建了几个对象?这是我们在讨论中最经常遇到的一个问题同时也是面试题。我们都知道在Java中从”.java"文件编译成".class"文件的过程,会有一个优化器去优化我们的代码。这个问题需要分成三种情况…

java quartz tomcat_Quartz Scheduler - 在Tomcat或应用程序jar中运行?

我们有一个Web应用程序,它通过在Jersey / Tomcat / Apache / PostgreSQL上运行的RESTful Web服务接收传入数据 . 与此Web服务应用程序分开,我们需要执行许多重复和计划任务 . 例如,以不同的时间间隔清除不同类型的数据,在不同的时…

php post json请求参数传递_php post json参数的传递和接收处理方法

页面1 ,php传递json参数的页面:1.phpfunction http_post_data($url, $data_string) {$ch curl_init();curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);curl_setopt($ch, …

Linux中如何查看某个端口是否被占用

Linux中如何查看某个端口是否被占用 1.netstat -anp |grep 端口号 如下,我以3306为例,netstat -anp |grep 3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo…

java 压缩jar 仓库,java服务安装(一):使用java service wrapper及maven打zip包

tags: java jsw maven zip1、概述使用java开发程序,在windows平台下,一般有web应用,后台服务应用,桌面应用:web应用多数打成war包在web容器(如tomcat,jetty等)中运行桌面应用一般打成jar包或exe文件运行后台…

如何处理代码冲突

如何处理代码冲突 冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并,那么过程看…

php试题与答案(二),php面试题附答案二

1、如何实现字符串翻转?function getStr($str){$lenstrlen($str);for ($i0;$i$temp$str[$i];$str[$i]$str[$len-$i-1];$str[$len-$i-1]$temp;}return $str;}echo getStr("abcdef");?>2、apachemysqlphp实现最大负载的方法?个人观点&#x…

如何理解NIO

文章目录1.什么是NIO?2.为什么用NIO,传统IO有什么缺陷?3.NIO和IO的区别4.怎么理解NIO是面向块的、非阻塞的5.NIO是怎么实现的?1.什么是NIO? java.nio全称java non-blocking IO(实际上是 new io&#xff09…

sublime php快捷键,分享Sublime Text 3快捷键精华版!

下面由sublime教程栏目给大家介绍Sublime Text 3 快捷键精华版,希望对需要的朋友有所帮助!CtrlShiftP:打开命令面板CtrlP:搜索项目中的文件CtrlG:跳转到第几行CtrlW:关闭当前打开文件CtrlShiftW&#xff1a…

MyBatis Plus——忽略某个实体类属性和数据库表字段之间的映射关系

问题描述 在开发中可能会遇到MyBatis-Plus使用实体类属性进行SQL操作,但是不用存到数据库中去查找,这时候我们的实体中有这个属性,但是数据库的表中没有这个字段(即:实体类属性非数据库表字段),如果不做处理就会报错。…

php 高德地图计算距离,距离、长度、面积

JS API 为开发者提供了空间数据计算的函数库 AMap.GeometryUtil,可以帮助开发者计算点线面空间关系、长度、面积等函数。更多示例请查看 示例中心本章我们将介绍一些常用的数学计算方法,包括:计算两点间的实际距离 AMap.GeometryUtil.distanc…

@Transient注解作用

java 的transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。 用法 transient 就是在给某个javabean上需要添加个属性,但是这…