关与广州小区水水电费分摊表的算法对吗?

22:57 提问
RESTful API在代码中调用出现 505错误
问题如下:
1.RESTful API在浏览器中访问,没有问题,返回结果正确。
2.在代码里调这个RESTful API就会报505错误。
调用的代码结构如下:
1.先鉴权,并保存cookie
final String userPassword = bean.getUsername() + ":" + bean.getPassword();
final String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
String ssoCookieValue =
final URL url = new URL(bean.getServerURL() + "authentication-point/authenticate");
final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// add the timeout to the connection and read
this.setTimeout(conn);
// set the basic authentication
conn.setRequestProperty("Authorization", "Basic " + encoding);
conn.connect();
// try to authenticate the qc user and password
final int responseCode = conn.getResponseCode();
if (responseCode != HttpURLConnection.HTTP_OK) {
if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
throw new RESTException(Constants.EXCEPTION_AUTH_FAIL, new String[] {});
} else if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) {
throw new RESTException(Constants.EXCEPTION_NETWORK_FAIL, new String[] {});
log.error("*** response code is " + responseCode);
throw new RESTException(Constants.EXCEPTION_NETWORK_FAIL, new String[] {});
// get return cookie
ssoCookieValue = this.getCookieValue(conn, "LWSSO_COOKIE_KEY");
log.debug("Cookie for LWSSO_COOKIE_KEY: " + ssoCookieValue);
// disconnect
conn.disconnect();
} catch (IOException e) {
if (e instanceof java.net.UnknownHostException) {
throw new RESTException(Constants.EXCEPTION_UNKNOWN_HOST, new String[] {});
} else if (e instanceof java.net.SocketTimeoutException) {
throw new RESTException(Constants.EXCEPTION_CONNECTION_TIMEOUT, new String[] {});
2.然后构造connection,链接server,发出请求
final URL url = new URL(this.buildRequestURL(bean, entityId));
final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// add the timeout to the connection and read
this.setTimeout(conn);
this.buildHeader(conn, ssoCookieValue);
this.buildBody(conn, qc, entityId);
conn.connect();
3.解析response
final int responseCode = conn.getResponseCode();
final JAXBContext jaxb = JAXBContext.newInstance("com.mycompany.myproject.jaxb");
final Unmarshaller unmarshall = jaxb.createUnmarshaller();
Object result =
if (this.isSuccessful(responseCode)) {
result = this.handleSuccessfulResponse(unmarshall, conn);
this.handleFailedResponse(responseCode, unmarshall, conn);
this.setResult(result);
问题就出在第三步的第一句
final int responseCode = conn.getResponseCode();
debug到这里,看到responseCode是505.
上网搜了一下,有人说505错误是不支持HTTP/1.1造成的,解决办法是取消IE中的“使用HTTP1.1”。
我这里的IE即使勾选上“使用HTTP1.1”,调用这个RESTful API也不会出错。
为什么在代码里就会有505错误呢?
请大家指点。谢谢!
按赞数排序
其他相似问题PHP使用RESTful API_问答_ThinkSAAS
PHP使用RESTful API
PHP使用RESTful API
RESTful API 如何用PHP来使用
例如,我需要做1个上传图片到独立的图片服务器
如下, restful api 参考
POST /v1/appkey HTTP/1.1
Host: 10.0.0.1:7500
Content-Length: length
Date: date
PUT /v1/tfs/T1FOZHB4ET1RCvBVdK HTTP/1.1
Host: 10.0.0.1:7500
Content-Length: 22
Date: Fri, 30 Nov :00 GMT
这种应该如何写PHP? 有没有参考?
因为 RESTful API 都是基于HTTP的,也就是说,只要你有一个HTTP客户端(比如浏览器,用PHP的curl库模拟等等)就可以与API通信了。
你上面看到的都是客户端与API在基于HTTP协议进行通信时的一些HTTP头信息与数据,比如你打开谷歌浏览器的开发者工具,然后选择网络(Network)就可以看到本次通讯的所有HTTP相关信息了。
在进行API调用前,最好还是先了解一些 HTTP 和 的相关知识,这个很重要。
简单的原理是这样的:既然客户端(你的应用)与 API进行通信,必须使用 HTTP协议,那么简单了。你只要向API发HTTP请求不就得了呗,那怎么发?如何发? 浏览器就行,当然方便一点是使用一些插件了(后文说)。那关键是你现在要用PHP来发HTTP请求和处理请求啊,那行,PHP提供了curl库和fsockopen,这两个都可以模拟发HTTP请求和处理返回的数据。所以用它们就可以了。
言归正传,上面API的调用,你可以使用进行调用,这个还是比较简单的,自己再封装一把,基本就可以了。不懂看这个,适合新手。
当然你也可以使用第三方的封装好的PHP的HTTP客户端(实际上它里面还是使用了php的curl库或者fsockopen库),比如这些(来源:):
1.-一个全面的HTTP客户端
2.-另一个HTTP客户端
3.-一个简单的HTTP库
4.-一个链式HTTP库
这里也有一些基于浏览器开发的一些插件,调试REST API非常方便,提供几个(chrome适用):
1.(自己最喜欢的,方便易用)
要是想了解REST这里收集了一些资料,对于API调用者,了解一下应该就可以了。
添加你想要问的问题
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信developerWorks 社区
JAX-RS (JSR-311) 是一种 Java™ API,可使 Java Restful 服务的开发变得迅速而轻松。这个 API 提供了一种基于注释的模型来描述分布式资源。注释被用来提供资源的位置、资源的表示和可移植的(pluggable)数据绑定架构。在本文中,学习如何使用 JAX-RS 在 Java EE 环境内实现 RESTful 服务架构的潜能。
, 技术推广专家, IBM
Dustin Amrhein
刚加入到 IBM 时是一名 WebSphere Application Server 开发团队的成员。在担任此职位期间,Dustin 从事 Web 服务基础设施以及 Web 服务编程模型的开发。此外,Dustin 负责 Java RESTful 服务框架开发的技术工作。Dustin 目前担任的角色是 IBM 的 WebSphere 产品组合中的新兴技术的推广者。他目前主要关注交付云计算功能的 WebSphere 技术,包括 WebSphere CloudBurst Appliance。
, 软件工程师, IBM
Nick Gallardo 是德克萨斯州奥斯汀市的一名软件工程师。他自 WebSphere Application
Server 版本 5.0 开始就一直从事 WebSphere Application
Server 的各个方面。Nick 是 Apache
Axis2 开源项目的贡献者并一直从事 WebSphere 的 REST 支持和 JAX-RS。
简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范。它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代。 在本文中,了解 JAX-RS 的主要组件。本文用一个例子展示了一个企业如何使用 JAX-RS 内的功能以一种 Restful 的方式公开员工的联系信息。 背景 多年来,开发人员使用各种工具在其 Java 应用程序内创建 RESTful 服务。由于 REST 架构的简单性,主要需求 — 接收 HTTP 消息和头部的能力 — 可以由一个简单的 Java Web 容器实现。
Java servlets 常被用来开发 RESTful 应用程序。如何使用 servlet 并没有固定的模式。通常,servlet 会接受请求并自己解析这个 HTTP 请求 URI,以将此请求与一个已知资源相匹配。对于 REST 服务开发,这个简单的 servlet 模型以更为正式的 API 得到扩展。但是,因为这些 API 是在 servlet 模型之上开发的,所以这些 API 中没有一个是作为正式的标准开发的。
随着 REST 越来越多地被采用为一种架构,Java Community Process (JCP) 计划在未来的 Java Enterprise Edition 6 发布版中包括对 REST 的正式支持。JSR-311 也已创建好,并已有了 JAX-RS 1.0 规范,提供了一种新的基于注释的方式来开发 RESTful 服务。与 servlet 模型相比,JAX-RS 注释让您能集中于您的资源和数据对象。并且,您不必再开发通讯层(通过 servlet)。
Java 资源 JAX-RS 建立了一种特殊的语言来描述资源,正如由其编程模型所表示的。有五种主要条目:根资源、子资源、资源方法、子资源方法以及子资源定位器。根资源根资源是由 @Path 注释的 Java 类。@Path 注释提供了一个 value 属性,用来表明此资源所在的路径。value 属性可以是文本字符、变量或变量外加一个定制的正则表达式。清单 1 给出了一个例子。清单 1. JAX-RS 根资源package com.ibm.jaxrs.sample.
import javax.ws.rs.P
@Path(value="/contacts")
public class ContactsResource {
}子资源 子资源是作为
调用的结果返回的 Java 类。它们类似于根资源,只不过它们不是由 @Path 注释的,因它们的路径是由子资源定位器给出的。子资源通常包含由 HTTP 请求方法指示符(designator)注释的方法以便服务此请求。如果它们不包含如此注释的方法,那么它们将会通过指派给合适的子资源定位器来进一步解析此资源处理请求。清单 2. JAX-RS 子资源package com.ibm.jaxrs.sample.
import javax.ws.rs.GET;
public class Department {
public String getDepartmentName() {
}如上所示的清单 2 展示了由 ContactsResource.getContactDepartment 方法返回的子资源。在这个例子中,如果一个 HTTP GET 请求被发送给 /contact/{contactName}/department 路径,那么 Department 子资源内的
getDepartmentName 资源方法就会处理此请求。资源方法 资源方法是根资源或子资源内绑定到 HTTP 方法的 Java 方法。绑定是通过诸如 @GET 这样的注释完成的。
清单 3. JAX-RS 资源方法package com.ibm.jaxrs.sample.
import java.util.L
import javax.ws.rs.GET;
import javax.ws.rs.P
@Path(value="/contacts")
public class ContactsResource {
public List&ContactInfo& getContacts() {
}在清单 3 的例子中,发送到 /contacts 路径的 HTTP GET 请求将会由 getContacts() 资源方法处理。子资源方法 子资源方法非常类似于资源方法;惟一的区别是子资源方法也是由 @Path 注释的,此注释进一步限定了该方法的选择。清单 4. JAX-RS 子资源方法package com.ibm.jaxrs.sample.
import java.util.L
import javax.ws.rs.GET;
import javax.ws.rs.P
@Path(value="/contacts")
public class ContactsResource {
public List&ContactInfo& getContacts() {
@Path(value="/ids")
public List&String& getContactIds() {
}在清单 4 中,发送到 /contacts/ids 路径的 HTTP GET 请求将会由 getContactIds() 子资源方法处理。子资源定位器 子资源定位器是能进一步解析用来处理给定请求的资源的一些方法。它们非常类似于子资源方法,因它们具备一个 @Path 注释,但不具备 HTTP 请求方法指示符,比如 @GET 注释。
清单 5. JAX-RS 子资源定位器package com.ibm.jaxrs.sample.
import java.util.L
import javax.ws.rs.GET;
import javax.ws.rs.P
import javax.ws.rs.PathP
@Path(value="/contacts")
public class ContactsResource {
public List&ContactInfo& getContactss() {
@Path(value="/ids")
public List&String& getContactIds() {
@Path(value="/contact/{contactName}/department")
public Department getContactDepartment(@PathParam(value="contactName")
String contactName) {
}在上述例子中,对 /contact/{contactName}/department 路径的任何 HTTP 请求都将由 getContactDepartment 子资源定位器处理。 {contactName} 部分表明 contact 路径部分之后可以是任何合法的 URL 值。
注释本节将会探讨一些重要的注释及其使用。对于由 JAX-RS 规范提供的注释的完整列表,可以参考本文的
部分给出的 JSR-311 链接。
@Path@Path 注释被用来描述根资源、子资源方法或子资源的位置。value 值可以包含文本字符、变量或具有定制正则表达式的变量。清单 6 的例子展示了
@Path 注释的主要应用。清单 6. @Path 的使用package com.ibm.jaxrs.sample.
import java.util.L
import javax.ws.rs.GET;
import javax.ws.rs.P
import javax.ws.rs.PathP
@Path(value="/contacts")
public class ContactsResource {
@Path(value="/{emailAddress:.+@.+\\.[a-z]+}")
public ContactInfo getByEmailAddress(@PathParam(value="emailAddress")
String emailAddress) {
@Path(value="/{lastName}")
public ContactInfo getByLastName(@PathParam(value="lastName") String lastName) {
}ContactsResource 类上的注释表明对
/contacts 路径的所有请求都将由 ContactsResource 根资源处理。getByEmailAddress 上的 @Path 注释则表明任何发送到 /contacts/{emailAddress} 的请求(其中 emailAddress 代表的是正则表达式 .+@.+\\.[a-z]+)都将由 getByEmailAddress 处理。 getByLastName 方法上的 @Path 注释指定了发送到
/contacts/{lastName} 路径的所有请求(其中 lastName 代表的是一个与 getByEmailAddress 内的正则表达式不匹配的有效的 URL 部分)都将由 getByLastName 方法处理。@GET、@POST、@PUT、@DELETE、@HEAD @GET、@POST、@PUT、@DELETE 以及 @HEAD 均是 HTTP 请求方法指示符注释。您可以使用它们来绑定根资源或子资源内的
Java 方法与 HTTP 请求方法。HTTP GET 请求被映射到由 @GET 注释的方法;HTTP POST 请求被映射到由
@POST 注释的方法,以此类推。用户可能还需要通过使用 @HttpMethod 注释定义其自己的定制 HTTP 请求方法指示符。清单 7. 定制的 HTTP 请求方法指示符注释package com.ibm.jaxrs.sample.
import java.lang.annotation.ElementT
import java.lang.annotation.R
import java.lang.annotation.RetentionP
import java.lang.annotation.T
import javax.ws.rs.HttpM
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@HttpMethod("GET")
public @interface CustomGET {
}上述的声明定义了 @CustomGET 注释。此注释将具有与 @GET 注释相同的语义值并可用在其位置上。@Conumes 和 @Produces@Consumes 注释代表的是一个资源可以接受的 MIME 类型。@Produces 注释代表的是一个资源可以返回的 MIME 类型。这些注释均可在资源、资源方法、子资源方法、子资源定位器或子资源内找到。清单 8. @Consumes/@Producespackage com.ibm.jaxrs.sample.
import java.util.L
import javax.ws.rs.C
import javax.ws.rs.GET;
import javax.ws.rs.P
import javax.ws.rs.PathP
import javax.ws.rs.P
@Path(value="/contacts")
public class ContactsResource {
@Path(value="/{emailAddress:.+@.+\\.[a-z]+}")
@Produces(value={"text/xml", "application/json"})
public ContactInfo getByEmailAddress(@PathParam(value="emailAddress")
String emailAddress) {
@Path(value="/{lastName}")
@Produces(value="text/xml")
public ContactInfo getByLastName(@PathParam(value="lastName") String lastName) {
@Consumes(value={"text/xml", "application/json"})
public void addContactInfo(ContactInfo contactInfo) {
}对于上述的 getByEmailAddress 和 addContactInfo 方法,它们均能处理 text/xml 和
application/json。被接受或返回的资源表示将依赖于客户机设置的 HTTP 请求头。@Consumes 注释针对 Content-Type 请求头进行匹配,以决定方法是否能接受给定请求的内容。
在清单 9 中,application/json 的 Content-Type 头再加上对路径 /contacts 的 POST,表明我们的 ContactsResource 类内的 addContactInfo 方法将会被调用以处理请求。清单 9. Content-Type 头部的使用POST /contacts HTTP/1.1
Content-Type: application/json
Content-Length: 32相反地,@Produces 注释被针对 Accept 请求头进行匹配以决定客户机是否能够处理由给定方法返回的表示。清单 10. Accept 头部的使用GET /contacts/johndoe@ HTTP/1.1
Accept: application/json
在清单 10 中,对
/contacts/johndoe@ 的 GET 请求表明了 getByEmailAddress 方法将会被调用并且返回的格式将会是 application/json,而非 text/xml。Providers JAX-RS 提供程序是一些应用程序组件,允许在三个关键领域进行运行时行为的定制:数据绑定、异常映射以及上下文解析(比如,向运行时提供 JAXBContext 实例)。每个 JAX-RS 提供程序类必须由 @Provider 注释。如下的例子讨论了两个数据绑定提供程序 MessageBodyWriter 和 MessageBodyReader。
MessageBodyWriter MessageBodyWriters 被 JAX-RS 运行时用来序列化所返回资源的表示。遵从 JSR-311 的运行时提供了对常见类型(java.lang.String、java.io.InputStream、
JAXB 对象等)的本机支持,但用户也可以向 JAX-RS 运行时提供他或她自己的 MessageBodyWriter。比如,您可以提供一个定制 MessageBodyWriter 来处理定制 ContactInfo Java
类型,如下所示。
清单 11. 定制 MessageBodyWriterpackage com.ibm.jaxrs.sample.
import javax.ws.rs.C
import javax.ws.rs.P
import javax.ws.rs.ext.MessageBodyW
import javax.ws.rs.ext.P
@Produces("text/xml")
public class ContactInfoWriter implements MessageBodyWriter&ContactInfo& {
public long getSize(T t, java.lang.Class&ContactInfo& type,
java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
annotations, MediaType mediaType)
public boolean isWriteable(java.lang.Class&ContactInfo& type,
java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
annotations, MediaType mediaType) {
public void writeTo(ContactInfo contactInfo, java.lang.Class&ContactInfo& type,
java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
annotations, MediaType mediaType, MultivaluedMap&
java.lang.String, java.lang.Object& httpHeaders, java.io.OutputStream
entityStream) {
contactInfo.serialize(entityStream);
}ContactInfoWriter 则在所返回的资源表示被序列化之前由 JAX-RS 运行时调用。如果 isWriteable 返回 true 且 @Produces 是此资源方法的 @Produces 值最为接近的匹配,就会调用 writeTo 方法。在这里,ContactInfoWriter 负责向底层的 OutputStream 序列化
ContactInfo 实例的内容。
MessageBodyReader MessageBodyReaders 则与 MessageBodyWriters 相反。对于反序列化,JAX-RS 运行时支持与序列化相同的类型。用户也可以提供他或她自己的 MessageBodyReader 实现。MessageBodyReader 的最主要的功能是读取请求 InputStream 并将传入的字节反序列化到一个此资源方法期望的 Java 对象。ContactInfo 类型的 MessageBodyReader 可以类似于清单 12。
清单 12. 定制 MessageBodyReaderpackage com.ibm.jaxrs.sample.
import javax.ws.rs.C
import javax.ws.rs.P
import javax.ws.rs.ext.MessageBodyR
import javax.ws.rs.ext.P
@Consumes("text/xml")
public class ContactInfoReader implements MessageBodyReader&ContactInfo& {
public boolean isReadable(java.lang.Class&ContactInfo& type,
java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
annotations, MediaType mediaType) {
public ContactInfo readFrom(java.lang.Class&ContactInfo& type,
java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
annotations, MediaType mediaType, MultivaluedMap&
java.lang.String,java.lang.String& httpHeaders, java.io.InputStream
entityStream) {
return ContactInfo.parse(entityStream);
} 与 MessageBodyWriter isWriteable 类似,ContactInfoReader 的
isReadable 方法将被调用以便决定 MessageBodyReader 能否处理此输入。如果 isReadable 返回 true 且
@Consumes 值与此资源方法的 @Consumes 值最为匹配,就会选择 ContactInfoReader。当 readFrom 方法被调用时,结果会是基于请求 InputStream 的内容创建 ContactInfo 实例。
配置至此,我们探讨了 JAX-RS 资源类和一些提供程序类(MessageBodyReaders
和 MessageBodyWriters)。那么,该如何在 JAX-RS
运行时内配置这些类呢?这可以通过扩展 javax.ws.rs.core.Application 类实现。此类提供了一组类或一组单例(singleton)对象实例,在一个 JAX-RS 应用程序内包括所有的
根级别的资源和提供程序(由 @Provider 注释的类)。若为这个示例联系信息应用程序扩展这个 Application 类,它应该类似于清单 13。
清单 13. ContactInfoApplicationpackage com.ibm.jaxrs.sample.
import java.util.HashS
import java.util.S
import javax.ws.rs.core.A
public class ContactInfoApplicaiton extends Application {
public Set&Class&?&& getClasses() {
Set&Class&?&& classes = new HashSetSet&Class&?&&();
classes.add(ContactsResource.class);
classes.add(ContactInfoWriter.class);
classes.add(ContactInfoReader.class);
public SetSet&Object&?&& getSingletons() {
// nothing to do, no singletons
}getClasses 方法为 JAX-RS 运行时提供了一组可用于元数据的类。请注意,getSingletons 方法什么都不返回。通常而言,将 JAX-RS 提供程序视为单例是没有问题的,但将一个 JAX-RS 资源视为单例则要格外谨慎。常被 JAX-RS 资源类使用的基于注释的注入可能在一个单例实例的情况内并不受支持。因此,除非仔细计划,否则应该避免使用 JAX-RS 资源的单例实例。
假设,您正在一个 servlet 容器内部署一个 JAX-RS 应用程序,有两种方法可以向 JAX-RS 运行时注册您的 javax.ws.rs.core.Application 子类。这是由 WAR 文件的 web.xml 处理的,如下所示。清单 14. 不能感知 JAX-RS 的 servlet 容器&web-app id="WebApp_ID" version="2.5"
xmlns="/xml/ns/javaee" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd"&
&servlet-name&ContactInfoServlet&/servlet-name&
&servlet-class&com.sample.RESTSystemServlet&/servlet-class&
&init-param&
&param-name&javax.ws.rs.Application&/param-name&
&param-value&
com.ibm.jaxrs.sample.organization.ContactInfoApplication
&/param-value&
&/init-param&
&/servlet&
&servlet-mapping&
&servlet-name&ContactInfoServlet&/servlet-name&
&url-pattern&/*&/url-pattern&
&/servlet-mapping&
&/web-app&在一个被认为是不能感知 JAX-RS 的 servlet 容器内,应该作为 servlet 定义内的 init-param 提供 Application 子类名。init-param 的名字必须是 javax.ws.rs.Application。servlet 类则很可能是 JAX-RS 运行时系统
servlet。您可以列出每个可能的 URL 模式,或者使用 /* 通配符注册,如下所示。清单 15. 能感知 JAX-RS 的 servlet 容器&web-app id="WebApp_ID" version="2.5"
xmlns="/xml/ns/javaee" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd"&
&servlet-name&ContactInfoServlet&/servlet-name&
&servlet-class&
com.ibm.jaxrs.sample.organization.ContactInfoApplication
&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&ContactInfoServlet&/servlet-name&
&url-pattern&/*&/url-pattern&
&/servlet-mapping&
&/web-app&在一个被认为是能感知 JAX-RS 的 servlet 容器内,必须作为 servlet 定义内的 servlet 类元素的值提供 Application 子类名。您仍然可以选择是列出每个可能的 URL 模式还是使用 /* 通配符注册。以 Apache Wink 作为运行时的 JAX-RS下一步是找到一个能够支持 JAX-RS 内的可用功能的运行时。Apache Wink 项目就提供了一个能满足这种要求的运行时,具有上面所述的所有特性(参见 )。起初,Wink 是由开源社区的多个厂商和成员发起的一个协作项目。该项目的目的是提供最为灵活和轻量级的运行时。
除了标准 JAX-RS 特性之外,Wink 还提供了对 JSON、Atom 和 RSS
序列化格式的增强支持。JAX-RS 本身并不提供客户机 API,但 Wink 包括了其对客户机 API 的自身模型,并且是完全以资源为中心的。
为了简化基于 Wink 的服务的开发,可以下载 Wink 1.0 库并将它们作为默认
JAX-RS 库包括到 Rational Application Developer (RAD) 7.5.5 开发环境(参见 )中。在这个更新版本中,RAD 添加了一个 JAX-RS facet,可供您进行配置以支持验证器和注释帮助。这个新的 facet 还能通过自动生成所需的 servlet 项和映射来简化 servlet 的配置。结束语与传统的 servlet 模型相比,JAX-RS 提供了一种可行的、更为简便、移植性更好的方式来在 Java 内实现 RESTful 服务。使用注释让您能够轻松提供 Java 资源的路径位置并将 Java 方法绑定到 HTTP 请求方法。一种可移植的数据绑定架构提供了一些本机的 Java 类型支持并允许进行序列化/反序列化处理的完全定制。javax.ws.rs.core.
Application 子类的扩展以及 web.xml 内的相应清单表明了用最少的部署描述符配置就能进行轻松部署。
本文只涉及了 JAX-RS 所能提供功能的一部分。就提供应用程序上下文(比如 JAXBContext 实例)并将运行时异常映射给 HTTP 请求而言,其他两个 JAX-RS 提供程序类型
ContextResolvers 和 ExceptionMappingProviders 还能提供对应用程序组件的进一步控制。注释的定义是为了控制方法参数和类成员的注入,它们在运行时的整个过程向应用程序提供了有价值的上下文信息。总的来说,JAX-RS
必将是一种面向基于 Java 的 RESTful 服务开发的简便、可移植的、全面的 API。
探索 Java.net 上的
项目,获得 API 和规范以及与这个专家组进行沟通的邮件列表。
“”,这是 Roy Fielding 所写的一篇有关 REST 的专题论文,引入了 RESTful 架构的概念。
更多地了解 。
“”提供了对 REST 基本原理的简介。
Bill Burke 撰写的 (O'Reilly Media,2009 年 11 月)是一本有关使用 RESTful 架构原理以及 Java EE 6 内的 JAX-RS 规范用 Java 设计和开发分布式 Web 服务的实用参考。
developerWorks
内有丰富的面向 Web 2.0 的工具和信息。
:随时关注 developerWorks 的技术活动和网络广播。
:个性化您的 developerWorks 体验。:下载此框架来构建 RESTful Web 服务。
:现在就下载这些版本并开始尝试使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Web development, SOA and web servicesArticleID=495630ArticleTitle=用 Java 技术创建 RESTful Web 服务publish-date=

我要回帖

更多关于 水电费分摊说明 的文章

 

随机推荐