Chapter 25. Examples for Chapter 11
In Chapter 11, you learned about HTTP caching techniques. Servers can tell HTTP clients if and how long they can cache retrieved resources. You can revalidate expired caches to avoid resending big messages by issuing conditional GET invocations. Conditional PUT operations can be invoked for safe concurrent updates.
Example ex11_1: Caching and Concurrent Updates
The example in this chapter expands on the CustomerResource
example repeated throughout this book to support caching, conditional GETs, and conditional PUTs.
The Server Code
The first thing is to add a hashCode()
method to the Customer
class:
src/main/java/com/restfully/shop/domain/Customer.java
@XmlRootElement
(
name
=
"customer"
)
public
class
Customer
{
...
@Override
public
int
hashCode
()
{
int
result
=
id
;
result
=
31
*
result
+
(
firstName
!=
null
?
firstName
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
lastName
!=
null
?
lastName
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
street
!=
null
?
street
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
city
!=
null
?
city
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
state
!=
null
?
state
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
zip
!=
null
?
zip
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
country
!=
null
?
country
.
hashCode
()
:
0
);
return
result
;
}
}
This method is used in the CustomerResource
class to generate semi-unique ETag
header values. While a hash code calculated in this manner isn’t guaranteed to be unique, there is a high probability that it will be. A database ...
Get RESTful Java with JAX-RS 2.0, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.