You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2021/09/03 15:40:04 UTC
[juneau] branch master updated: Context API refactoring.
This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 8e39a23 Context API refactoring.
8e39a23 is described below
commit 8e39a23d1e3336522be9acfd764b8fd746aaeb6b
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Fri Sep 3 10:50:39 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/rest/RestContext.java | 87 ++--------------------
.../org/apache/juneau/rest/RestContextBuilder.java | 70 +++++++++--------
.../org/apache/juneau/rest/annotation/Rest.java | 27 ++++++-
.../juneau/rest/annotation/RestAnnotation.java | 2 +-
.../apache/juneau/rest/annotation/RestDelete.java | 24 ++++--
.../org/apache/juneau/rest/annotation/RestGet.java | 24 ++++--
.../org/apache/juneau/rest/annotation/RestOp.java | 24 ++++--
.../apache/juneau/rest/annotation/RestPost.java | 24 ++++--
.../org/apache/juneau/rest/annotation/RestPut.java | 24 ++++--
9 files changed, 162 insertions(+), 144 deletions(-)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 862fca7..f981ab6 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -149,78 +149,6 @@ public class RestContext extends BeanContext {
public static final String REST_beanStore = PREFIX + ".beanStore.o";
/**
- * Configuration property: Default request attributes.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link org.apache.juneau.rest.RestContext#REST_defaultRequestAttributes REST_defaultRequestAttributes}
- * <li><b>Name:</b> <js>"RestContext.defaultRequestAttributes.lo"</js>
- * <li><b>Data type:</b> <c>{@link org.apache.juneau.rest.NamedAttribute}[]</c>
- * <li><b>System property:</b> <c>RestContext.defaultRequestAttributes</c>
- * <li><b>Environment variable:</b> <c>RESTCONTEXT_DEFAULTREQUESTATTRIBUTES</c>
- * <li><b>Default:</b> empty list
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link org.apache.juneau.rest.annotation.Rest#defaultRequestAttributes()}
- * <li class='ja'>{@link org.apache.juneau.rest.annotation.RestOp#defaultRequestAttributes()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttribute(String,Object)}
- * <li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttribute(String,Supplier)}
- * <li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies default values for request attributes if they're not already set on the request.
- *
- * <ul class='notes'>
- * <li>
- * Affects values returned by the following methods:
- * <ul>
- * <li class='jm'>{@link RestRequest#getAttribute(String)}.
- * <li class='jm'>{@link RestRequest#getAttributes()}.
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
- * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder <jv>builder</jv>) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * <jv>builder</jv>
- * .defaultRequestAttributes(
- * BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>),
- * BasicNamedAttribute.<jsm>of</jsm>(<js>"Baz"</js>, <jk>true</jk>)
- * );
- *
- * <jc>// Same, but using property.</jc>
- * <jv>builder</jv>.appendTo(<jsf>REST_defaultRequestAttributes</jsf>, BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>));
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder <jv>builder</jv>) <jk>throws</jk> Exception {
- * <jv>builder</jv>.defaultRequestAttribute(<js>"Foo"</js>, <js>"bar"</js>);
- * }
- *
- * <jc>// Override at the method level.</jc>
- * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> Object myMethod() {...}
- * }
- * </p>
- */
- public static final String REST_defaultRequestAttributes = PREFIX + ".defaultRequestAttributes.lo";
-
- /**
* Configuration property: Default request headers.
*
* <h5 class='section'>Property:</h5>
@@ -1406,7 +1334,7 @@ public class RestContext extends BeanContext {
defaultRequestHeaders = createDefaultRequestHeaders(r, cp, bf).build();
defaultResponseHeaders = createDefaultResponseHeaders(r, cp, bf).build();
- defaultRequestAttributes = createDefaultRequestAttributes(r, cp, bf);
+ defaultRequestAttributes = createDefaultRequestAttributes(r, builder, bf);
opArgs = createOpArgs(r, builder, bf).asArray();
hookMethodArgs = createHookMethodArgs(r, cp, bf).asArray();
@@ -2857,20 +2785,17 @@ public class RestContext extends BeanContext {
*
* @param resource
* The REST servlet or bean that this context defines.
- * @param properties
- * The properties of this bean.
- * <br>Consists of all properties gathered through the builder and annotations on this class and all parent classes.
+ * @param builder
+ * The builder for this object.
* @param beanStore
* The factory used for creating beans and retrieving injected beans.
* <br>Created by {@link #createBeanStore(Object,ContextProperties,RestContext)}.
* @return The default response headers for this REST object.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected NamedAttributeList createDefaultRequestAttributes(Object resource, ContextProperties properties, BeanStore beanStore) throws Exception {
-
- NamedAttributeList x = NamedAttributeList.create();
+ protected NamedAttributeList createDefaultRequestAttributes(Object resource, RestContextBuilder builder, BeanStore beanStore) throws Exception {
- x.appendUnique(properties.getInstanceArray(REST_defaultRequestAttributes, NamedAttribute.class, beanStore).orElse(new NamedAttribute[0]));
+ NamedAttributeList x = builder.defaultRequestAttributes;
x = BeanStore
.of(beanStore, resource)
@@ -3971,7 +3896,7 @@ public class RestContext extends BeanContext {
* Returns the default request attributes for this resource.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
* </ul>
*
* @return
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 7092d52..b930672 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -137,6 +137,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
BeanRef<RestLogger> callLoggerDefault = BeanRef.of(RestLogger.class);
BeanRef<RestLogger> callLogger = BeanRef.of(RestLogger.class);
BeanRef<DebugEnablement> debugEnablement = BeanRef.of(DebugEnablement.class);
+ NamedAttributeList defaultRequestAttributes = NamedAttributeList.create();
Enablement debugDefault, debug;
@@ -1258,51 +1259,48 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
}
/**
- * <i><l>RestContext</l> configuration property: </i> Default request attribute.
+ * Default request attributes.
*
* <p>
- * Adds a single default request attribute.
+ * Specifies default values for request attributes if they're not already set on the request.
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
* </ul>
*
- * @param name The attribute name.
- * @param value The attribute value.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder defaultRequestAttribute(String name, Object value) {
- return defaultRequestAttributes(BasicNamedAttribute.of(name, value));
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Default request attribute.
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
*
- * <p>
- * Adds a single default request attribute.
+ * <jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder <jv>builder</jv>) <jk>throws</jk> Exception {
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
- * </ul>
+ * <jc>// Using method on builder.</jc>
+ * <jv>builder</jv>
+ * .defaultRequestAttributes(
+ * BasicNamedAttribute.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>),
+ * BasicNamedAttribute.<jsm>of</jsm>(<js>"Baz"</js>, <jk>true</jk>)
+ * );
+ * }
*
- * @param name The attribute name.
- * @param value The attribute value supplier.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder defaultRequestAttribute(String name, Supplier<?> value) {
- return defaultRequestAttributes(BasicNamedAttribute.of(name, value));
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Default request attributes.
+ * <jc>// Option #3 - Defined via builder passed in through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder <jv>builder</jv>) <jk>throws</jk> Exception {
+ * <jv>builder</jv>.defaultRequestAttribute(<js>"Foo"</js>, <js>"bar"</js>);
+ * }
*
- * <p>
- * Adds multiple default request attributes.
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
+ * </p>
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <ul class='notes'>
+ * <li>Use {@link BasicNamedAttribute#of(String, Supplier)} to provide a dynamically changeable attribute value.
* </ul>
*
* @param values The attributes.
@@ -1310,7 +1308,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
*/
@FluentSetter
public RestContextBuilder defaultRequestAttributes(NamedAttribute...values) {
- asList(values).stream().forEach(x -> appendTo(REST_defaultRequestAttributes, x));
+ defaultRequestAttributes.appendUnique(values);
return this;
}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index bcb8f8a..ae9819f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -524,6 +524,26 @@ public @interface Rest {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
+ * </p>
+ *
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
@@ -531,7 +551,12 @@ public @interface Rest {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link RestOp#defaultRequestAttributes()}
+ * <li class='ja'>{@link RestGet#defaultRequestAttributes()}
+ * <li class='ja'>{@link RestPut#defaultRequestAttributes()}
+ * <li class='ja'>{@link RestPost#defaultRequestAttributes()}
+ * <li class='ja'>{@link RestDelete#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index 8c5e27a..d50e2af 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -1045,7 +1045,7 @@ public class RestAnnotation {
b.setIf(a.partParser() != HttpPartParser.Null.class, REST_partParser, a.partParser());
stringStream(a.produces()).map(MediaType::of).forEach(x -> b.produces(x));
stringStream(a.consumes()).map(MediaType::of).forEach(x -> b.consumes(x));
- stringStream(a.defaultRequestAttributes()).map(x -> BasicNamedAttribute.ofPair(x)).forEach(x -> b.appendTo(REST_defaultRequestAttributes, x));
+ stringStream(a.defaultRequestAttributes()).map(x -> BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
stringStream(a.defaultRequestHeaders()).map(x -> stringHeader(x)).forEach(x -> b.appendTo(REST_defaultRequestHeaders, x));
stringStream(a.defaultResponseHeaders()).map(x -> stringHeader(x)).forEach(x -> b.appendTo(REST_defaultResponseHeaders, x));
b.appendToIfNotEmpty(REST_defaultRequestHeaders, accept(string(a.defaultAccept())));
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
index 7abb5f1..1f230c1 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDelete.java
@@ -207,21 +207,35 @@ public @interface RestDelete {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestDelete</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doDelete() {...}
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
* </p>
*
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link Rest#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
index ffa3f2a..6c87023 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
@@ -222,21 +222,35 @@ public @interface RestGet {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestGet</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doGet() {...}
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
* </p>
*
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link Rest#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
index 9d04e3d..be19d0b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
@@ -277,21 +277,35 @@ public @interface RestOp {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestOp</ja>(method=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doGet() {...}
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
* </p>
*
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link Rest#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
index 8a2d8ea..aa53e3c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
@@ -279,21 +279,35 @@ public @interface RestPost {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestPost</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doPost() {...}
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
* </p>
*
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link Rest#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
index ee284df..f799e79 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
@@ -279,21 +279,35 @@ public @interface RestPut {
* <p>
* Specifies default values for request attributes if they're not already set on the request.
*
+ * <p>
+ * Affects values returned by the following methods:
+ * <ul>
+ * <li class='jm'>{@link RestRequest#getAttribute(String)}.
+ * <li class='jm'>{@link RestRequest#getAttributes()}.
+ * </ul>
+ *
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * <jc>// Assume "text/json" Accept value when Accept not specified</jc>
- * <ja>@RestPut</ja>(path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
- * <jk>public</jk> String doPut() {...}
+ * <jc>// Defined via annotation resolving to a config file setting with default value.</jc>
+ * <ja>@Rest</ja>(defaultRequestAttributes={<js>"Foo=bar"</js>, <js>"Baz: $C{REST/myAttributeValue}"</js>})
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Override at the method level.</jc>
+ * <ja>@RestGet</ja>(defaultRequestAttributes={<js>"Foo: bar"</js>})
+ * <jk>public</jk> Object myMethod() {...}
+ * }
* </p>
*
+ * </ul>
* <ul class='notes'>
* <li>
* Supports {@doc RestSvlVariables}
- * (e.g. <js>"$S{mySystemProperty}"</js>).
+ * (e.g. <js>"$L{my.localized.variable}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_defaultRequestAttributes}
+ * <li class='jm'>{@link RestContextBuilder#defaultRequestAttributes(NamedAttribute...)}
+ * <li class='ja'>{@link Rest#defaultRequestAttributes()}
* </ul>
*/
String[] defaultRequestAttributes() default {};