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 2020/01/03 23:23:47 UTC

[juneau] branch master updated: Simplify default req/res header annotations.

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 b2bf625  Simplify default req/res header annotations.
b2bf625 is described below

commit b2bf6257d3ac672adbe998ddb63bec083718aaf8
Author: JamesBognar <ja...@apache.org>
AuthorDate: Fri Jan 3 18:23:31 2020 -0500

    Simplify default req/res header annotations.
---
 juneau-doc/docs/ReleaseNotes/5.0.0.09.html         |   2 +-
 juneau-doc/docs/ReleaseNotes/7.1.0.html            |   4 +-
 juneau-doc/docs/ReleaseNotes/8.1.0.html            |   8 +-
 juneau-doc/docs/ReleaseNotes/8.1.3.html            |   9 +
 .../04.Rest/01.AnnotationInheritance.html          |   4 +-
 .../06.juneau-rest-server/31.DefaultHeaders.html   |  12 +-
 .../test/java/org/apache/juneau/rest/NlsTest.java  |   4 +-
 .../annotation/RestResourcePropertiesTest.java     |   4 +-
 .../juneau/rest/annotation2/RestHookTest.java      |  10 +-
 .../rest/annotation2/RestMethodInheritTest.java    |   6 +-
 .../org/apache/juneau/rest/headers/AcceptTest.java |  16 +-
 .../juneau/rest/headers/ContentTypeTest.java       |  14 +-
 .../apache/juneau/rest/headers/HeadersTest.java    |  18 +-
 .../apache/juneau/rest/BasicRestCallLogger.java    |   2 +-
 .../java/org/apache/juneau/rest/RestContext.java   | 438 +++++++++++----------
 .../org/apache/juneau/rest/RestContextBuilder.java | 244 +++++++-----
 .../org/apache/juneau/rest/RestMethodContext.java  | 182 +++++----
 .../java/org/apache/juneau/rest/RestRequest.java   |  12 +-
 .../java/org/apache/juneau/rest/RestResponse.java  |   2 +-
 .../org/apache/juneau/rest/annotation/Rest.java    | 106 +++--
 .../juneau/rest/annotation/RestConfigApply.java    |  29 +-
 .../apache/juneau/rest/annotation/RestMethod.java  | 100 +++--
 .../rest/annotation/RestMethodConfigApply.java     |  32 +-
 .../juneau/rest/annotation/RestResource.java       |   6 +-
 24 files changed, 734 insertions(+), 530 deletions(-)

diff --git a/juneau-doc/docs/ReleaseNotes/5.0.0.09.html b/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
index fbfb4d8..c8b3bb3 100644
--- a/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
+++ b/juneau-doc/docs/ReleaseNotes/5.0.0.09.html
@@ -39,7 +39,7 @@
 	<li>New <dc>@RestResource.defaultRequestHeaders</dc> and <dc>@RestResource.defaultResponseHeaders</dc> annotations.</li>
 	<li>New {@link oajr.annotation.RestMethod#serializers() @RestMethod(serializers)} and {@link oajr.annotation.RestMethod#parsers() @RestMethod(parsers)} annotations.</li>
 	<li>New {@link oajr.annotation.RestMethod#properties() @RestMethod(properties)} annotation.</li>
-	<li>New {@link oajr.annotation.RestMethod#defaultRequestHeaders() @RestMethod(defaultRequestHeaders)} annotation.</li>
+	<li>New <dc>@RestMethod(defaultRequestHeaders)</dc> annotation.</li>
 	<li>New {@link oajr.annotation.RestMethod#matchers() @RestMethod(matchers)} annotation and {@link oajr.RestMatcher} class.</li>
 	<li><c>Readers</c> and <c>InputStreams</c> can be specified on <dc>@Content</dc> annotated parameters.</li>
 	<li>New <dc>@HasParam</dc> annotation.</li>
diff --git a/juneau-doc/docs/ReleaseNotes/7.1.0.html b/juneau-doc/docs/ReleaseNotes/7.1.0.html
index 86918b4..04da84a 100644
--- a/juneau-doc/docs/ReleaseNotes/7.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/7.1.0.html
@@ -273,8 +273,8 @@
 			<li>{@link oajr.RestContext#REST_converters REST_converters}
 			<li>{@link oajr.RestContext#REST_guards REST_guards}
 			<li>{@link oajr.RestContext#REST_responseHandlers REST_responseHandlers}
-			<li>{@link oajr.RestContext#REST_defaultRequestHeaders REST_defaultRequestHeaders}
-			<li>{@link oajr.RestContext#REST_defaultResponseHeaders REST_defaultResponseHeaders}
+			<li><dc>REST_defaultRequestHeaders</dc>
+			<li><dc>REST_defaultResponseHeaders</dc>
 			<li>{@link oajr.RestContext#REST_produces REST_produces}
 			<li>{@link oajr.RestContext#REST_consumes REST_consumes}
 			<li>{@link oajr.RestContext#REST_clientVersionHeader REST_clientVersionHeader}
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.0.html b/juneau-doc/docs/ReleaseNotes/8.1.0.html
index dcda35f..3f3c66c 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.0.html
@@ -211,12 +211,12 @@
 			<li class='jc'>{@link oajr.RequestAttributes}
 			<li class='jc'>{@link oajr.RestContext}
 			<ul>
-				<li class='jf'>{@link oajr.RestContext#REST_attrs REST_attrs}
+				<li class='jf'><dc>REST_attrs</dc>
 			</ul>
 			<li class='jc'>{@link oajr.RestContextBuilder}
 			<ul>
-				<li class='jm'>{@link oajr.RestContextBuilder#attrs(String...) attrs(String...)}
-				<li class='jm'>{@link oajr.RestContextBuilder#attr(String,Object) attr(String,Object)}
+				<li class='jm'><dc>attrs(String...)</dc>
+				<li class='jm'><dc>attr(String,Object)</dc>
 			</ul>
 			<li class='jc'>{@link oajr.RestMethodContext}
 			<ul>
@@ -232,7 +232,7 @@
 				<li class='jm'>{@link oajr.RestResponse#attr(String,Object) attr(String,Object)}
 			</ul>
 			<li class='ja'>{@link oajr.annotation.Attr}
-			<li class='ja'>{@link oajr.annotation.RestMethod#attrs()}
+			<li class='ja'><dc>RestMethod#attrs()</dc>
 			<li class='ja'><dc>RestResource.attrs()</dc>
 		</ul>
 		<br>This deprecates the following APIs:
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.3.html b/juneau-doc/docs/ReleaseNotes/8.1.3.html
index 530f5f2..05cb78c 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.3.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.3.html
@@ -48,6 +48,15 @@
 	<li>
 		Fixed a bug where <c><ja>@RestResource</ja>(debug=<js>"true"</js>)</c> wouldn't log requests if a 
 		<ja>@RestMethod</ja>-annotated method was not matched.
+	<li>
+		Renamed the following annotations:
+		<ul>
+			<li><ja>@Rest(attrs)</ja> --&gt; {@link oajr.annotation.Rest#reqAttrs() @Rest(reqAttrs)}
+			<li><ja>@Rest(defaultRequestHeaders)</ja> --&gt; {@link oajr.annotation.Rest#reqHeaders() @Rest(reqHeaders)}
+			<li><ja>@Rest(defaultResponseHeaders)</ja> --&gt; {@link oajr.annotation.Rest#resHeaders() @Rest(resHeaders)}
+			<li><ja>@RestMethod(attrs)</ja> --&gt; {@link oajr.annotation.RestMethod#reqAttrs() @RestMethod(reqAttrs)}
+			<li><ja>@RestMethod(defaultRequestHeaders)</ja> --&gt; {@link oajr.annotation.RestMethod#reqHeaders() @RestMethod(reqHeaders)}
+		</ul>
 		
 </ul>
 
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html b/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
index 3de6c54..9a2c90b 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/04.Rest/01.AnnotationInheritance.html
@@ -85,7 +85,7 @@ Annotation Inheritance
 		</td>
 	</tr>
 	<tr>
-		<td>{@link oajr.annotation.Rest#defaultRequestHeaders() defaultRequestHeaders()}</td>
+		<td>{@link oajr.annotation.Rest#reqHeaders() reqHeaders()}</td>
 		<td>
 			Headers on child are combined with those on parent class.
 			<br>Headers are applied parent-to-child in the order they appear in the annotation.
@@ -93,7 +93,7 @@ Annotation Inheritance
 		</td>
 	</tr>
 	<tr>
-		<td>{@link oajr.annotation.Rest#defaultResponseHeaders() defaultResponseHeaders()}</td>
+		<td>{@link oajr.annotation.Rest#resHeaders() resHeaders()}</td>
 		<td>
 			Headers on child are combined with those on parent class.
 			<br>Headers are applied parent-to-child in the order they appear in the annotation.
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html b/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
index e2f70d5..8469108 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/31.DefaultHeaders.html
@@ -20,10 +20,10 @@ Default Headers
 </p>
 <ul class='javatree'>
 	<li class='ja'>
-		{@link oajr.annotation.Rest#defaultRequestHeaders() Rest(defaultRequestHeaders)} 
+		{@link oajr.annotation.Rest#reqHeaders() Rest(reqHeaders)} 
 		<br>Defines default headers on request when the client doesn't specify them.
 	<li class='ja'>
-		{@link oajr.annotation.Rest#defaultResponseHeaders() Rest(defaultResponseHeaders)}
+		{@link oajr.annotation.Rest#resHeaders() Rest(resHeaders)}
 		<br>Appends the specified headers if they weren't already set programmatically.	
 </ul>		
 
@@ -33,10 +33,10 @@ Default Headers
 	<ja>@Rest</ja>(
 
 		<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-		defaultRequestHeaders={<js>"Accept: text/json"</js>},
+		reqHeaders={<js>"Accept: text/json"</js>},
 
 		<jc>// Add a version header attribute to all responses</jc>
-		defaultResponseHeaders={<js>"X-Version: 1.0"</js>}
+		resHeaders={<js>"X-Version: 1.0"</js>}
 	)
 	<jk>public</jk> MyRestServlet <jk>extends</jk> BasicRestServlet {
 		...
@@ -50,9 +50,9 @@ Default Headers
 		{@link oajr.RestContextBuilder}
 		<ul>
 			<li class='jm'>
-				{@link oajr.RestContextBuilder#defaultRequestHeaders(String[])}
+				{@link oajr.RestContextBuilder#reqHeaders(String[])}
 			<li class='jm'>
-				{@link oajr.RestContextBuilder#defaultResponseHeaders(String[])}
+				{@link oajr.RestContextBuilder#resHeaders(String[])}
 		</ul>
 	</li>
 </ul>
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
index 6c75034..3d8b1e7 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/NlsTest.java
@@ -35,7 +35,7 @@ public class NlsTest {
 
 	@Rest(
 		serializers={A01.class},
-		attrs={"TestProperty:$L{key1}"},
+		reqAttrs={"TestProperty:$L{key1}"},
 		messages="NlsTest"
 	)
 	public static class A {
@@ -44,7 +44,7 @@ public class NlsTest {
 			return null;
 		}
 		@RestMethod(
-			attrs={"TestProperty:$L{key2}"}
+			reqAttrs={"TestProperty:$L{key2}"}
 		)
 		public String a02() {
 			return null;
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
index db1edef..d4c690a 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestResourcePropertiesTest.java
@@ -37,7 +37,7 @@ public class RestResourcePropertiesTest {
 
 	@Rest(
 		path="/p1",
-		attrs={
+		reqAttrs={
 			"A1: a1",
 			"A2: a2",
 			"foo: bar",
@@ -54,7 +54,7 @@ public class RestResourcePropertiesTest {
 	public static class A {
 
 		@RestMethod(name=GET, path="/p2",
-			attrs={"B1: b1", "B2:b"},
+			reqAttrs={"B1: b1", "B2:b"},
 			serializers=A01.class
 		)
 		public void testPropertiesDefinedOnMethod(RestResponse res) {
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
index 9d00e24..ebeacc2 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestHookTest.java
@@ -46,7 +46,7 @@ public class RestHookTest {
 
 	@Rest(
 		parsers=A01.class,
-		attrs={
+		reqAttrs={
 			"p1:sp1", // Unchanged servlet-level property.
 			"p2:sp2", // Servlet-level property overridden by onPreCall.
 			"p3:sp3", // Servlet-level property overridded by method.
@@ -67,7 +67,7 @@ public class RestHookTest {
 		}
 
 		@RestMethod(name=PUT, path="/propertiesOverriddenByAnnotation",
-			attrs={
+			reqAttrs={
 				"p3:mp3",
 				"p4:mp4"
 			}
@@ -119,7 +119,7 @@ public class RestHookTest {
 
 	@Rest(
 		serializers=B01.class,
-		attrs={
+		reqAttrs={
 			"p1:sp1", // Unchanged servlet-level property.
 			"p2:sp2", // Servlet-level property overridden by onPostCall.
 			"p3:sp3", // Servlet-level property overridded by method.
@@ -143,11 +143,11 @@ public class RestHookTest {
 		}
 
 		@RestMethod(name=PUT, path="/propertiesOverridenByAnnotation",
-			attrs={
+			reqAttrs={
 				"p3:mp3",
 				"p4:mp4"
 			},
-			defaultRequestHeaders="Accept: text/s2"
+			reqHeaders="Accept: text/s2"
 		)
 		public String b01() {
 			return null;
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
index 3869c71..d7b745c 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/RestMethodInheritTest.java
@@ -271,10 +271,10 @@ public class RestMethodInheritTest {
 	// Test properties inheritance.
 	//=================================================================================================================
 
-	@Rest(attrs={"p1:v1","p2:v2"})
+	@Rest(reqAttrs={"p1:v1","p2:v2"})
 	public static class E {}
 
-	@Rest(attrs={"p2:v2a","p3:v3","p4:v4"})
+	@Rest(reqAttrs={"p2:v2a","p3:v3","p4:v4"})
 	public static class E01 extends E {}
 
 	@Rest
@@ -284,7 +284,7 @@ public class RestMethodInheritTest {
 			// Should show {p1:'v1',p2:'v2a',p3:'v3',p4:'v4'}
 			return transform(attrs);
 		}
-		@RestMethod(attrs={"p4:v4a","p5:v5"})
+		@RestMethod(reqAttrs={"p4:v4a","p5:v5"})
 		public ObjectMap e02(RequestAttributes attrs, @HasQuery("override") boolean override) {
 			// Should show {p1:'v1',p2:'v2a',p3:'v3',p4:'v4a',p5:'v5'} when override is false.
 			// Should show {p1:'x',p2:'x',p3:'x',p4:'x',p5:'x'} when override is true.
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
index 1e497a5..5f3ba03 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/AcceptTest.java
@@ -62,7 +62,7 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 "},
+		reqHeaders={" Accept : text/s2 "},
 		serializers={S1.class,S2.class}
 	)
 	public static class A {
@@ -91,7 +91,7 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 "},
+		reqHeaders={" Accept : text/s2 "},
 		serializers={S1.class,S2.class}
 	)
 	public static class B {
@@ -123,7 +123,7 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 "},
+		reqHeaders={" Accept : text/s2 "},
 		serializers={S1.class,S2.class}
 	)
 	public static class C {
@@ -157,7 +157,7 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 "},
+		reqHeaders={" Accept : text/s2 "},
 		serializers={S1.class,S2.class}
 	)
 	public static class D {
@@ -195,11 +195,11 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 "},
+		reqHeaders={" Accept : text/s2 "},
 		serializers={S1.class,S2.class}
 	)
 	public static class E {
-		@RestMethod(name=PUT, defaultRequestHeaders={"Accept: text/s3"}, serializers=S3.class)
+		@RestMethod(name=PUT, reqHeaders={"Accept: text/s3"}, serializers=S3.class)
 		public String d(@Body String in) {
 			return in;
 		}
@@ -233,11 +233,11 @@ public class AcceptTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Accept : text/s2 ",},
+		reqHeaders={" Accept : text/s2 ",},
 		serializers={S1.class,S2.class}
 	)
 	public static class F {
-		@RestMethod(name=PUT, defaultRequestHeaders={"Accept: text/s3"}, serializers={Inherit.class, S3.class})
+		@RestMethod(name=PUT, reqHeaders={"Accept: text/s3"}, serializers={Inherit.class, S3.class})
 		public String f(@Body String in) {
 			return in;
 		}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
index 55d82c8..95ea2b7 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/ContentTypeTest.java
@@ -64,7 +64,7 @@ public class ContentTypeTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Content-Type : text/p2 "},
+		reqHeaders={" Content-Type : text/p2 "},
 		parsers={P1.class,P2.class}
 	)
 	public static class A {
@@ -93,7 +93,7 @@ public class ContentTypeTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Content-Type : text/p2 "},
+		reqHeaders={" Content-Type : text/p2 "},
 		parsers={P1.class,P2.class}
 	)
 	public static class B {
@@ -137,7 +137,7 @@ public class ContentTypeTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Content-Type : text/p2 "},
+		reqHeaders={" Content-Type : text/p2 "},
 		parsers={P1.class,P2.class}
 	)
 	public static class C {
@@ -172,11 +172,11 @@ public class ContentTypeTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Content-Type : text/p2 "},
+		reqHeaders={" Content-Type : text/p2 "},
 		parsers={P1.class,P2.class}
 	)
 	public static class E {
-		@RestMethod(name=PUT, defaultRequestHeaders={"Content-Type: text/p3"}, parsers=P3.class)
+		@RestMethod(name=PUT, reqHeaders={"Content-Type: text/p3"}, parsers=P3.class)
 		public String e(@Body String in) {
 			return in;
 		}
@@ -210,11 +210,11 @@ public class ContentTypeTest {
 	//=================================================================================================================
 
 	@Rest(
-		defaultRequestHeaders={" Content-Type : text/p2 "},
+		reqHeaders={" Content-Type : text/p2 "},
 		parsers={P1.class,P2.class}
 	)
 	public static class F {
-		@RestMethod(name=PUT, defaultRequestHeaders={"Content-Type: text/p3"}, parsers={Inherit.class,P3.class})
+		@RestMethod(name=PUT, reqHeaders={"Content-Type: text/p3"}, parsers={Inherit.class,P3.class})
 		public String f(@Body String in) {
 			return in;
 		}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
index 689cbd4..e30085d 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/headers/HeadersTest.java
@@ -459,7 +459,7 @@ public class HeadersTest {
 
 	@Rest
 	public static class C {
-		@RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+		@RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
 		public ObjectMap c(RequestHeaders headers) {
 			return new ObjectMap()
 				.append("h1", headers.getString("H1"))
@@ -470,15 +470,15 @@ public class HeadersTest {
 	static MockRest c = MockRest.build(C.class, null);
 
 	@Test
-	public void c01_defaultRequestHeaders_default() throws Exception {
+	public void c01_reqHeaders_default() throws Exception {
 		c.get("/c").execute().assertBody("{h1:'1',h2:'2',h3:'3'}");
 	}
 	@Test
-	public void c02_defaultRequestHeaders_override() throws Exception {
+	public void c02_reqHeaders_override() throws Exception {
 		c.get("/c").header("H1",4).header("H2",5).header("H3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
 	}
 	@Test
-	public void c03_defaultRequestHeaders_override_caseInsensitive() throws Exception {
+	public void c03_reqHeaders_override_caseInsensitive() throws Exception {
 		c.get("/c").header("h1",4).header("h2",5).header("h3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
 	}
 
@@ -488,7 +488,7 @@ public class HeadersTest {
 
 	@Rest
 	public static class D {
-		@RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+		@RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
 		public ObjectMap d(RequestHeaders headers) {
 			return new ObjectMap()
 				.append("h1", headers.getString("h1"))
@@ -499,15 +499,15 @@ public class HeadersTest {
 	static MockRest d = MockRest.build(D.class, null);
 
 	@Test
-	public void d01_defaultRequestHeadersCaseInsensitive_default() throws Exception {
+	public void d01_reqHeadersCaseInsensitive_default() throws Exception {
 		d.get("/d").execute().assertBody("{h1:'1',h2:'2',h3:'3'}");
 	}
 	@Test
-	public void d02_defaultRequestHeadersCaseInsensitive_override() throws Exception {
+	public void d02_reqHeadersCaseInsensitive_override() throws Exception {
 		d.get("/d").header("H1",4).header("H2",5).header("H3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
 	}
 	@Test
-	public void d03_defaultRequestHeadersCaseInsensitive_override_caseInsensitive() throws Exception {
+	public void d03_reqHeadersCaseInsensitive_override_caseInsensitive() throws Exception {
 		d.get("/d").header("h1",4).header("h2",5).header("h3",6).execute().assertBody("{h1:'4',h2:'5',h3:'6'}");
 	}
 
@@ -629,7 +629,7 @@ public class HeadersTest {
 
 	@Rest
 	public static class H {
-		@RestMethod(defaultRequestHeaders={"H1:1","H2=2"," H3 : 3 "})
+		@RestMethod(reqHeaders={"H1:1","H2=2"," H3 : 3 "})
 		public ObjectMap h(@Header(value="h1",_default="4") String h1, @Header(value="h2",_default="5") String h2, @Header(value="h3",_default="6") String h3) {
 			return new ObjectMap()
 				.append("h1", h1)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
index 37d1892..b73828d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallLogger.java
@@ -182,7 +182,7 @@ public class BasicRestCallLogger implements RestCallLogger {
 			}
 
 			if (context != null && reqd.isOneOf(MEDIUM, LONG)) {
-				Map<String,Object> hh = context.getDefaultRequestHeaders();
+				Map<String,Object> hh = context.getReqHeaders();
 				if (! hh.isEmpty()) {
 					sb.append("\n---Default Servlet Headers---");
 					for (Map.Entry<String,Object> h : hh.entrySet()) {
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 95a27e0..d0f7463 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
@@ -1113,202 +1113,27 @@ public final class RestContext extends BeanContext {
 
 	/**
 	 * Configuration property:  Default request attributes.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RestContext.attrs.smo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
-	 * 	<li><b>Default:</b>  empty map
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link Rest#attrs()}
-	 * 			<li class='ja'>{@link RestMethod#attrs()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link RestContextBuilder#attrs(String...)}
-	 * 			<li class='jm'>{@link RestContextBuilder#attr(String,Object)}
-	 * 		</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>
-	 * 		Strings are in the format <js>"Name: value"</js>.
-	 * 	<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 builder) <jk>throws</jk> Exception {
-	 *
-	 * 			<jc>// Using method on builder.</jc>
-	 * 			builder
-	 * 				.attr(<js>"Foo"</js>, <js>"bar"</js>);
-	 * 				.attr(<js>"Baz: true"</js>);
-	 *
-	 * 			<jc>// Same, but using property.</jc>
-	 * 			builder.addTo(<jsf>REST_attrs</jsf>, <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 builder) <jk>throws</jk> Exception {
-	 * 			builder.attr(<js>"Foo"</js>, <js>"bar"</js>);
-	 * 		}
-	 *
-	 * 		<jc>// Override at the method level.</jc>
-	 * 		<ja>@RestMethod</ja>(attrs={<js>"Foo: bar"</js>})
-	 * 		public Object myMethod() {...}
-	 * 	}
-	 * </p>
+	 * 
+	 * @deprecated Use {@link #REST_reqAttrs}
 	 */
-	public static final String REST_attrs = PREFIX + ".attrs.smo";
+	@Deprecated
+	public static final String REST_attrs = PREFIX + ".reqAttrs.smo";
 
 	/**
 	 * Configuration property:  Default request headers.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RestContext.defaultRequestHeaders.smo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,String&gt;</c>
-	 * 	<li><b>Default:</b>  empty map
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link Rest#defaultRequestHeaders()}
-	 * 			<li class='ja'>{@link RestMethod#defaultRequestHeaders()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link RestContextBuilder#defaultRequestHeader(String,Object)}
-	 * 			<li class='jm'>{@link RestContextBuilder#defaultRequestHeaders(String...)}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 * <p>
-	 * Specifies default values for request headers if they're not passed in through the request.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Strings are in the format <js>"Header-Name: header-value"</js>.
-	 * 	<li>
-	 * 		Affects values returned by {@link RestRequest#getHeader(String)} when the header is not present on the request.
-	 * 	<li>
-	 * 		The most useful reason for this annotation is to provide a default <c>Accept</c> header when one is not
-	 * 		specified so that a particular default {@link Serializer} is picked.
-	 * </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>(defaultRequestHeaders={<js>"Accept: application/json"</js>, <js>"My-Header: $C{REST/myHeaderValue}"</js>})
-	 * 	<jk>public class</jk> MyResource {
-	 *
-	 * 		<jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
-	 * 		<jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
-	 *
-	 * 			<jc>// Using method on builder.</jc>
-	 * 			builder
-	 * 				.defaultRequestHeader(<js>"Accept"</js>, <js>"application/json"</js>);
-	 * 				.defaultRequestHeaders(<js>"My-Header: foo"</js>);
-	 *
-	 * 			<jc>// Same, but using property.</jc>
-	 * 			builder.addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</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 builder) <jk>throws</jk> Exception {
-	 * 			builder.defaultRequestHeader(<js>"Accept"</js>, <js>"application/json"</js>);
-	 * 		}
-	 *
-	 * 		<jc>// Override at the method level.</jc>
-	 * 		<ja>@RestMethod</ja>(defaultRequestHeaders={<js>"Accept: text/xml"</js>})
-	 * 		public Object myMethod() {...}
-	 * 	}
-	 * </p>
+	 * 
+	 * @deprecated Use {@link #REST_reqHeaders}
 	 */
-	public static final String REST_defaultRequestHeaders = PREFIX + ".defaultRequestHeaders.smo";
+	@Deprecated
+	public static final String REST_defaultRequestHeaders = PREFIX + ".reqHeaders.smo";
 
 	/**
 	 * Configuration property:  Default response headers.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RestContext.defaultResponseHeaders.omo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,String&gt;</c>
-	 * 	<li><b>Default:</b>  empty map
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link Rest#defaultResponseHeaders()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link RestContextBuilder#defaultResponseHeader(String,Object)}
-	 * 			<li class='jm'>{@link RestContextBuilder#defaultResponseHeaders(String...)}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 * <p>
-	 * Specifies default values for response headers if they're not set after the Java REST method is called.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Strings are in the format <js>"Header-Name: header-value"</js>.
-	 * 	<li>
-	 * 		This is equivalent to calling {@link RestResponse#setHeader(String, String)} programmatically in each of
-	 * 		the Java methods.
-	 * 	<li>
-	 * 		The header value will not be set if the header value has already been specified (hence the 'default' in the name).
-	 * </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>(defaultResponseHeaders={<js>"Content-Type: $C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: $C{REST/myHeaderValue}"</js>})
-	 * 	<jk>public class</jk> MyResource {
-	 *
-	 * 		<jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
-	 * 		<jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
-	 *
-	 * 			<jc>// Using method on builder.</jc>
-	 * 			builder
-	 * 				.defaultResponseHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
-	 * 				.defaultResponseHeaders(<js>"My-Header: foo"</js>);
-	 *
-	 * 			<jc>// Same, but using property.</jc>
-	 * 			builder
-	 * 				.addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
-	 * 				.addTo(<jsf>REST_defaultRequestHeaders</jsf>, <js>"My-Header"</js>, <js>"foo"</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 builder) <jk>throws</jk> Exception {
-	 * 			builder.defaultResponseHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
-	 * 		}
-	 * 	}
-	 * </p>
+	 * 
+	 * @deprecated Use {@link #REST_resHeaders}
 	 */
-	public static final String REST_defaultResponseHeaders = PREFIX + ".defaultResponseHeaders.omo";
+	@Deprecated
+	public static final String REST_defaultResponseHeaders = PREFIX + ".resHeaders.omo";
 
 	/**
 	 * Configuration property:  Compression encoders.
@@ -2302,6 +2127,205 @@ public final class RestContext extends BeanContext {
 	public static final String REST_renderResponseStackTraces = PREFIX + ".renderResponseStackTraces.b";
 
 	/**
+	 * Configuration property:  Default request attributes.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RestContext.reqAttrs.smo"</js>
+	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
+	 * 	<li><b>Default:</b>  empty map
+	 * 	<li><b>Session property:</b>  <jk>false</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link Rest#reqAttrs()}
+	 * 			<li class='ja'>{@link RestMethod#reqAttrs()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link RestContextBuilder#reqAttrs(String...)}
+	 * 			<li class='jm'>{@link RestContextBuilder#reqAttr(String,Object)}
+	 * 		</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>
+	 * 		Strings are in the format <js>"Name: value"</js>.
+	 * 	<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>(reqAttrs={<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 builder) <jk>throws</jk> Exception {
+	 *
+	 * 			<jc>// Using method on builder.</jc>
+	 * 			builder
+	 * 				.attr(<js>"Foo"</js>, <js>"bar"</js>);
+	 * 				.attr(<js>"Baz: true"</js>);
+	 *
+	 * 			<jc>// Same, but using property.</jc>
+	 * 			builder.addTo(<jsf>REST_reqAttrs</jsf>, <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 builder) <jk>throws</jk> Exception {
+	 * 			builder.reqAttr(<js>"Foo"</js>, <js>"bar"</js>);
+	 * 		}
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestMethod</ja>(reqAttrs={<js>"Foo: bar"</js>})
+	 * 		public Object myMethod() {...}
+	 * 	}
+	 * </p>
+	 */
+	public static final String REST_reqAttrs = PREFIX + ".reqAttrs.smo";
+
+	/**
+	 * Configuration property:  Default request headers.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RestContext.reqHeaders.smo"</js>
+	 * 	<li><b>Data type:</b>  <c>Map&lt;String,String&gt;</c>
+	 * 	<li><b>Default:</b>  empty map
+	 * 	<li><b>Session property:</b>  <jk>false</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link Rest#reqHeaders()}
+	 * 			<li class='ja'>{@link RestMethod#reqHeaders()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link RestContextBuilder#reqHeader(String,Object)}
+	 * 			<li class='jm'>{@link RestContextBuilder#reqHeaders(String...)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Specifies default values for request headers if they're not passed in through the request.
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Strings are in the format <js>"Header-Name: header-value"</js>.
+	 * 	<li>
+	 * 		Affects values returned by {@link RestRequest#getHeader(String)} when the header is not present on the request.
+	 * 	<li>
+	 * 		The most useful reason for this annotation is to provide a default <c>Accept</c> header when one is not
+	 * 		specified so that a particular default {@link Serializer} is picked.
+	 * </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>(reqHeaders={<js>"Accept: application/json"</js>, <js>"My-Header: $C{REST/myHeaderValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+	 * 		<jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
+	 *
+	 * 			<jc>// Using method on builder.</jc>
+	 * 			builder
+	 * 				.reqHeader(<js>"Accept"</js>, <js>"application/json"</js>);
+	 * 				.reqHeaders(<js>"My-Header: foo"</js>);
+	 *
+	 * 			<jc>// Same, but using property.</jc>
+	 * 			builder.addTo(<jsf>REST_reqHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</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 builder) <jk>throws</jk> Exception {
+	 * 			builder.reqHeader(<js>"Accept"</js>, <js>"application/json"</js>);
+	 * 		}
+	 *
+	 * 		<jc>// Override at the method level.</jc>
+	 * 		<ja>@RestMethod</ja>(reqHeaders={<js>"Accept: text/xml"</js>})
+	 * 		public Object myMethod() {...}
+	 * 	}
+	 * </p>
+	 */
+	public static final String REST_reqHeaders = PREFIX + ".reqHeaders.smo";
+
+	/**
+	 * Configuration property:  Default response headers.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RestContext.resHeaders.omo"</js>
+	 * 	<li><b>Data type:</b>  <c>Map&lt;String,String&gt;</c>
+	 * 	<li><b>Default:</b>  empty map
+	 * 	<li><b>Session property:</b>  <jk>false</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link Rest#resHeaders()}
+	 * 		</ul>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link RestContextBuilder#resHeader(String,Object)}
+	 * 			<li class='jm'>{@link RestContextBuilder#resHeaders(String...)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Specifies default values for response headers if they're not set after the Java REST method is called.
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Strings are in the format <js>"Header-Name: header-value"</js>.
+	 * 	<li>
+	 * 		This is equivalent to calling {@link RestResponse#setHeader(String, String)} programmatically in each of
+	 * 		the Java methods.
+	 * 	<li>
+	 * 		The header value will not be set if the header value has already been specified (hence the 'default' in the name).
+	 * </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>(resHeaders={<js>"Content-Type: $C{REST/defaultContentType,text/plain}"</js>,<js>"My-Header: $C{REST/myHeaderValue}"</js>})
+	 * 	<jk>public class</jk> MyResource {
+	 *
+	 * 		<jc>// Option #2 - Defined via builder passed in through resource constructor.</jc>
+	 * 		<jk>public</jk> MyResource(RestContextBuilder builder) <jk>throws</jk> Exception {
+	 *
+	 * 			<jc>// Using method on builder.</jc>
+	 * 			builder
+	 * 				.resHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
+	 * 				.resHeaders(<js>"My-Header: foo"</js>);
+	 *
+	 * 			<jc>// Same, but using property.</jc>
+	 * 			builder
+	 * 				.addTo(<jsf>REST_resHeaders</jsf>, <js>"Accept"</js>, <js>"application/json"</js>);
+	 * 				.addTo(<jsf>REST_resHeaders</jsf>, <js>"My-Header"</js>, <js>"foo"</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 builder) <jk>throws</jk> Exception {
+	 * 			builder.resHeader(<js>"Content-Type"</js>, <js>"text/plain"</js>);
+	 * 		}
+	 * 	}
+	 * </p>
+	 */
+	public static final String REST_resHeaders = PREFIX + ".resHeaders.omo";
+
+	/**
 	 * Configuration property:  REST resource resolver.
 	 *
 	 * <h5 class='section'>Property:</h5>
@@ -3537,10 +3561,10 @@ public final class RestContext extends BeanContext {
 		consumes,
 		produces;
 	private final Map<String,Object>
-		defaultRequestHeaders,
-		defaultResponseHeaders,
+		reqHeaders,
+		resHeaders,
 		staticFileResponseHeaders;
-	private final ObjectMap defaultRequestAttributes;
+	private final ObjectMap reqAttrs;
 	private final ResponseHandler[] responseHandlers;
 	private final MimetypesFileTypeMap mimetypesFileTypeMap;
 	private final StaticFiles[] staticFiles;
@@ -3683,12 +3707,12 @@ public final class RestContext extends BeanContext {
 				_paramResolvers.put(rp.forClass(), rp);
 			paramResolvers = unmodifiableMap(_paramResolvers);
 
-			Map<String,Object> _defaultRequestHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-			_defaultRequestHeaders.putAll(getMapProperty(REST_defaultRequestHeaders, String.class));
-			defaultRequestHeaders = unmodifiableMap(new LinkedHashMap<>(_defaultRequestHeaders));
+			Map<String,Object> _reqHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+			_reqHeaders.putAll(getMapProperty(REST_reqHeaders, String.class));
+			reqHeaders = unmodifiableMap(new LinkedHashMap<>(_reqHeaders));
 
-			defaultRequestAttributes = new ObjectMap(getMapProperty(REST_attrs, Object.class)).unmodifiable();
-			defaultResponseHeaders = getMapProperty(REST_defaultResponseHeaders, Object.class);
+			reqAttrs = new ObjectMap(getMapProperty(REST_reqAttrs, Object.class)).unmodifiable();
+			resHeaders = getMapProperty(REST_resHeaders, Object.class);
 			staticFileResponseHeaders = getMapProperty(REST_staticFileResponseHeaders, Object.class);
 
 			logger = getInstanceProperty(REST_logger, resource, RestLogger.class, NoOpRestLogger.class, resourceResolver, this);
@@ -4841,45 +4865,45 @@ public final class RestContext extends BeanContext {
 	 * Returns the default request headers for this resource.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
 	 * </ul>
 	 *
 	 * @return
 	 * 	The default request headers for this resource.
 	 * 	<br>Never <jk>null</jk>.
 	 */
-	public Map<String,Object> getDefaultRequestHeaders() {
-		return defaultRequestHeaders;
+	public Map<String,Object> getReqHeaders() {
+		return reqHeaders;
 	}
 
 	/**
-	 * Returns the default request headers for this resource.
+	 * Returns the default request attributes for this resource.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
 	 * </ul>
 	 *
 	 * @return
 	 * 	The default request headers for this resource.
 	 * 	<br>Never <jk>null</jk>.
 	 */
-	public ObjectMap getDefaultRequestAttributes() {
-		return defaultRequestAttributes;
+	public ObjectMap getReqAttrs() {
+		return reqAttrs;
 	}
 
 	/**
 	 * Returns the default response headers for this resource.
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+	 * 	<li class='jf'>{@link RestContext#REST_resHeaders}
 	 * </ul>
 	 *
 	 * @return
 	 * 	The default response headers for this resource.
 	 * 	<br>Never <jk>null</jk>.
 	 */
-	public Map<String,Object> getDefaultResponseHeaders() {
-		return defaultResponseHeaders;
+	public Map<String,Object> getResHeaders() {
+		return resHeaders;
 	}
 
 	/**
@@ -5299,8 +5323,6 @@ public final class RestContext extends BeanContext {
 				.append("callHandler", callHandler)
 				.append("clientVersionHeader", clientVersionHeader)
 				.append("consumes", consumes)
-				.append("defaultRequestHeaders", defaultRequestHeaders)
-				.append("defaultResponseHeaders", defaultResponseHeaders)
 				.append("infoProvider", infoProvider)
 				.append("logger", logger)
 				.append("paramResolvers", paramResolvers)
@@ -5310,6 +5332,8 @@ public final class RestContext extends BeanContext {
 				.append("produces", produces)
 				.append("properties", properties)
 				.append("renderResponseStackTraces", renderResponseStackTraces)
+				.append("reqHeaders", reqHeaders)
+				.append("resHeaders", resHeaders)
 				.append("resourceResolver", resourceResolver)
 				.append("responseHandlers", responseHandlers)
 				.append("serializers", serializers)
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 0610221..fcc7a38 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
@@ -869,50 +869,24 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 
 	/**
 	 * Configuration property:  Default request attributes.
-	 *
-	 * <p>
-	 * Specifies default values for request attributes if they're not already set on the request.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
-	 * </ul>
-	 *
-	 * @param values The attributes in the format <js>"Name: value"</js>.
-	 * @return This object (for method chaining).
-	 * @throws RestServletException If malformed header is found.
+	 * 
+	 * @deprecated Use {@link #reqAttrs(String...)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder attrs(String...values) throws RestServletException {
-		for (String v : values) {
-			String[] p = RestUtils.parseKeyValuePair(v);
-			if (p == null)
-				throw new RestServletException("Invalid default request attribute specified: ''{0}''.  Must be in the format: ''Name: value''", v);
-			defaultRequestHeader(p[0], p[1]);
-		}
-		return this;
+		return reqAttrs(values);
 	}
 
 	/**
 	 * Configuration property:  Default request headers.
-	 *
-	 * <p>
-	 * Specifies default values for request headers if they're not passed in through the request.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-	 * </ul>
-	 *
-	 * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
-	 * @return This object (for method chaining).
-	 * @throws RestServletException If malformed header is found.
+	 * 
+	 * @deprecated Use {@link #reqHeaders(String...)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder defaultRequestHeaders(String...headers) throws RestServletException {
-		for (String header : headers) {
-			String[] h = RestUtils.parseHeader(header);
-			if (h == null)
-				throw new RestServletException("Invalid default request header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
-			defaultRequestHeader(h[0], h[1]);
-		}
-		return this;
+		return reqHeaders(headers);
 	}
 
 	/**
@@ -925,7 +899,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 */
 	public RestContextBuilder defaultAccept(String value) {
 		if (isNotEmpty(value))
-			defaultRequestHeader("Accept", value);
+			reqHeader("Accept", value);
 		return this;
 	}
 
@@ -939,86 +913,52 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 */
 	public RestContextBuilder defaultContentType(String value) {
 		if (isNotEmpty(value))
-			defaultRequestHeader("Content-Type", value);
+			reqHeader("Content-Type", value);
 		return this;
 	}
 
 	/**
 	 * Configuration property:  Default request attribute.
 	 *
-	 * <p>
-	 * Same as {@link #attrs(String...)} but adds a single attribute name/value pair.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
-	 * </ul>
-	 *
-	 * @param name The HTTP header name.
-	 * @param value The HTTP header value.
-	 * @return This object (for method chaining).
+	 * @deprecated Use {@link #reqAttr(String, Object)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder attr(String name, Object value) {
-		return addTo(REST_attrs, name, value);
+		return reqAttr(name, value);
 	}
 
 	/**
 	 * Configuration property:  Default request headers.
-	 *
-	 * <p>
-	 * Same as {@link #defaultRequestHeaders(String...)} but adds a single header name/value pair.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-	 * </ul>
-	 *
-	 * @param name The HTTP header name.
-	 * @param value The HTTP header value.
-	 * @return This object (for method chaining).
+	 * 
+	 * @deprecated Use {@link #reqHeader(String,Object)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder defaultRequestHeader(String name, Object value) {
-		return addTo(REST_defaultRequestHeaders, name, value);
+		return reqHeader(name, value);
 	}
 
 	/**
 	 * Configuration property:  Default response headers.
 	 *
-	 * <p>
-	 * Specifies default values for response headers if they're not set after the Java REST method is called.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
-	 * </ul>
-	 *
-	 * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
-	 * @return This object (for method chaining).
-	 * @throws RestServletException If malformed header is found.
+	 * @deprecated Use {@link #resHeaders(String...)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder defaultResponseHeaders(String...headers) throws RestServletException {
-		for (String header : headers) {
-			String[] h = RestUtils.parseHeader(header);
-			if (h == null)
-				throw new RestServletException("Invalid default response header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
-			defaultResponseHeader(h[0], h[1]);
-		}
-		return this;
+		return resHeaders(headers);
 	}
 
 	/**
 	 * Configuration property:  Default response headers.
 	 *
-	 * <p>
-	 * Same as {@link #defaultResponseHeaders(String...)} but adds a single header name/value pair.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
-	 * </ul>
-	 *
-	 * @param name The HTTP header name.
-	 * @param value The HTTP header value.
-	 * @return This object (for method chaining).
+	 * @deprecated Use {@link #resHeader(String, Object)}
 	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
 	public RestContextBuilder defaultResponseHeader(String name, Object value) {
-		return addTo(REST_defaultResponseHeaders, name, value);
+		return resHeader(name, value);
 	}
 
 	/**
@@ -1510,6 +1450,132 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	/**
+	 * Configuration property:  Default request attribute.
+	 *
+	 * <p>
+	 * Same as {@link #reqAttrs(String...)} but adds a single attribute name/value pair.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
+	 * </ul>
+	 *
+	 * @param name The HTTP header name.
+	 * @param value The HTTP header value.
+	 * @return This object (for method chaining).
+	 */
+	public RestContextBuilder reqAttr(String name, Object value) {
+		return addTo(REST_reqAttrs, name, value);
+	}
+
+	/**
+	 * Configuration property:  Default request attributes.
+	 *
+	 * <p>
+	 * Specifies default values for request attributes if they're not already set on the request.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
+	 * </ul>
+	 *
+	 * @param values The attributes in the format <js>"Name: value"</js>.
+	 * @return This object (for method chaining).
+	 * @throws RestServletException If malformed header is found.
+	 */
+	public RestContextBuilder reqAttrs(String...values) throws RestServletException {
+		for (String v : values) {
+			String[] p = RestUtils.parseKeyValuePair(v);
+			if (p == null)
+				throw new RestServletException("Invalid default request attribute specified: ''{0}''.  Must be in the format: ''Name: value''", v);
+			reqHeader(p[0], p[1]);
+		}
+		return this;
+	}
+
+	/**
+	 * Configuration property:  Default request headers.
+	 *
+	 * <p>
+	 * Same as {@link #reqHeaders(String...)} but adds a single header name/value pair.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
+	 * </ul>
+	 *
+	 * @param name The HTTP header name.
+	 * @param value The HTTP header value.
+	 * @return This object (for method chaining).
+	 */
+	public RestContextBuilder reqHeader(String name, Object value) {
+		return addTo(REST_reqHeaders, name, value);
+	}
+
+	/**
+	 * Configuration property:  Default request headers.
+	 *
+	 * <p>
+	 * Specifies default values for request headers if they're not passed in through the request.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
+	 * </ul>
+	 *
+	 * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
+	 * @return This object (for method chaining).
+	 * @throws RestServletException If malformed header is found.
+	 */
+	public RestContextBuilder reqHeaders(String...headers) throws RestServletException {
+		for (String header : headers) {
+			String[] h = RestUtils.parseHeader(header);
+			if (h == null)
+				throw new RestServletException("Invalid default request header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
+			reqHeader(h[0], h[1]);
+		}
+		return this;
+	}
+
+	/**
+	 * Configuration property:  Default response headers.
+	 *
+	 * <p>
+	 * Specifies default values for response headers if they're not set after the Java REST method is called.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_resHeaders}
+	 * </ul>
+	 *
+	 * @param headers The headers in the format <js>"Header-Name: header-value"</js>.
+	 * @return This object (for method chaining).
+	 * @throws RestServletException If malformed header is found.
+	 */
+	public RestContextBuilder resHeaders(String...headers) throws RestServletException {
+		for (String header : headers) {
+			String[] h = RestUtils.parseHeader(header);
+			if (h == null)
+				throw new RestServletException("Invalid default response header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
+			resHeader(h[0], h[1]);
+		}
+		return this;
+	}
+
+	/**
+	 * Configuration property:  Default response headers.
+	 *
+	 * <p>
+	 * Same as {@link #resHeaders(String...)} but adds a single header name/value pair.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_resHeaders}
+	 * </ul>
+	 *
+	 * @param name The HTTP header name.
+	 * @param value The HTTP header value.
+	 * @return This object (for method chaining).
+	 */
+	public RestContextBuilder resHeader(String name, Object value) {
+		return addTo(REST_resHeaders, name, value);
+	}
+
+	/**
 	 * REST resource resolver.
 	 *
 	 * <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
index 8fa25a4..e9b1c1c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
@@ -67,43 +67,11 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 
 	/**
 	 * Configuration property:  Default request attributes.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RestMethodContext.defaultRequestAttributes.smo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
-	 * 	<li><b>Default:</b>  <jk>null</jk>
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link RestMethod#attrs()}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 * Default request attributes.
-	 *
-	 * <p>
-	 * Specifies default values for request attributes if they are not already set on the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestAttributes={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doGet()  {...}
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #RESTMETHOD_reqAttrs}
 	 */
-	public static final String RESTMETHOD_attrs = PREFIX + ".attrs.smo";
+	@Deprecated
+	public static final String RESTMETHOD_attrs = PREFIX + ".reqAttrs.smo";
 
 	/**
 	 * Configuration property:  Client version pattern matcher.
@@ -274,45 +242,11 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 
 	/**
 	 * Configuration property:  Default request headers.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul>
-	 * 	<li><b>Name:</b>  <js>"RestMethodContext.defaultRequestHeaders.smo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
-	 * 	<li><b>Default:</b>  <jk>null</jk>
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link RestMethod#defaultRequestHeaders()}
-	 * 			<li class='ja'>{@link RestMethod#defaultAccept()}
-	 * 			<li class='ja'>{@link RestMethod#defaultContentType()}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 * Default request headers.
-	 *
-	 * <p>
-	 * Specifies default values for request headers if they're not passed in through the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestHeaders={<js>"Accept: text/json"</js>})
-	 * 	<jk>public</jk> String doGet()  {...}
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #RESTMETHOD_defaultRequestHeaders}
 	 */
-	public static final String RESTMETHOD_defaultRequestHeaders = PREFIX + ".defaultRequestHeaders.smo";
+	@Deprecated
+	public static final String RESTMETHOD_defaultRequestHeaders = PREFIX + ".reqHeaders.smo";
 
 	/**
 	 * Configuration property:  HTTP method name.
@@ -491,6 +425,88 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 	 */
 	public static final String RESTMETHOD_priority = PREFIX + ".priority.i";
 
+	/**
+	 * Configuration property:  Default request attributes.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RestMethodContext.reqAttrs.smo"</js>
+	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session property:</b>  <jk>false</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link RestMethod#reqAttrs()}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * Default request attributes.
+	 *
+	 * <p>
+	 * Specifies default values for request attributes if they are not already set on the request.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
+	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqAttrs={<js>"Foo: bar"</js>})
+	 * 	<jk>public</jk> String doGet()  {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
+	 * </ul>
+	 */
+	public static final String RESTMETHOD_reqAttrs = PREFIX + ".reqAttrs.smo";
+
+	/**
+	 * Configuration property:  Default request headers.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul>
+	 * 	<li><b>Name:</b>  <js>"RestMethodContext.reqHeaders.smo"</js>
+	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
+	 * 	<li><b>Default:</b>  <jk>null</jk>
+	 * 	<li><b>Session property:</b>  <jk>false</jk>
+	 * 	<li><b>Annotations:</b>
+	 * 		<ul>
+	 * 			<li class='ja'>{@link RestMethod#reqHeaders()}
+	 * 			<li class='ja'>{@link RestMethod#defaultAccept()}
+	 * 			<li class='ja'>{@link RestMethod#defaultContentType()}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * Default request headers.
+	 *
+	 * <p>
+	 * Specifies default values for request headers if they're not passed in through the request.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
+	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqHeaders={<js>"Accept: text/json"</js>})
+	 * 	<jk>public</jk> String doGet()  {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
+	 * </ul>
+	 */
+	public static final String RESTMETHOD_reqHeaders = PREFIX + ".reqHeaders.smo";
+
 	//-------------------------------------------------------------------------------------------------------------------
 	// Instance
 	//-------------------------------------------------------------------------------------------------------------------
@@ -515,10 +531,10 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 	final HttpPartParser partParser;
 	final JsonSchemaGenerator jsonSchemaGenerator;
 	final Map<String,Object>
-		defaultRequestHeaders,
+		reqHeaders,
 		defaultQuery,
 		defaultFormData;
-	final ObjectMap defaultRequestAttributes;
+	final ObjectMap reqAttrs;
 	final String defaultCharset;
 	final long maxInput;
 	final Map<String,Widget> widgets;
@@ -625,10 +641,10 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 
 		this.jsonSchemaGenerator = JsonSchemaGenerator.create().apply(ps).build();
 
-		Map<String,Object> _defaultRequestHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-		_defaultRequestHeaders.putAll(getMapProperty(RESTMETHOD_defaultRequestHeaders, Object.class));
+		Map<String,Object> _reqHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+		_reqHeaders.putAll(getMapProperty(RESTMETHOD_reqHeaders, Object.class));
 
-		ObjectMap _defaultRequestAttributes = new ObjectMap(context.getDefaultRequestAttributes()).appendAll(getMapProperty(RESTMETHOD_attrs, Object.class));
+		ObjectMap _reqAttrs = new ObjectMap(context.getReqAttrs()).appendAll(getMapProperty(RESTMETHOD_reqAttrs, Object.class));
 
 		Map<String,Object> _defaultQuery = new LinkedHashMap<>(getMapProperty(RESTMETHOD_defaultQuery, Object.class));
 
@@ -642,7 +658,7 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 					Header h = (Header)a;
 					if (h._default().length > 0) {
 						try {
-							_defaultRequestHeaders.put(firstNonEmpty(h.name(), h.value()), parseAnything(joinnl(h._default())));
+							_reqHeaders.put(firstNonEmpty(h.name(), h.value()), parseAnything(joinnl(h._default())));
 						} catch (ParseException e) {
 							throw new ConfigException(e, "Malformed @Header annotation");
 						}
@@ -669,8 +685,8 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 			}
 		}
 
-		this.defaultRequestHeaders = Collections.unmodifiableMap(_defaultRequestHeaders);
-		this.defaultRequestAttributes = _defaultRequestAttributes.unmodifiable();
+		this.reqHeaders = Collections.unmodifiableMap(_reqHeaders);
+		this.reqAttrs = _reqAttrs.unmodifiable();
 		this.defaultQuery = Collections.unmodifiableMap(_defaultQuery);
 		this.defaultFormData = Collections.unmodifiableMap(_defaultFormData);
 
@@ -1026,7 +1042,7 @@ public class RestMethodContext extends BeanContext implements Comparable<RestMet
 			.append("RestMethodContext", new DefaultFilteringObjectMap()
 				.append("defaultFormData", defaultFormData)
 				.append("defaultQuery", defaultQuery)
-				.append("defaultRequestHeaders", defaultRequestHeaders)
+				.append("reqHeaders", reqHeaders)
 				.append("httpMethod", httpMethod)
 				.append("priority", priority)
 			);
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index a7cfcf0..d7d0006 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -111,7 +111,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	private UriContext uriContext;
 	private String charset, authorityPath;
 	private RequestHeaders headers;
-	private RequestAttributes attributes;
+	private RequestAttributes attrs;
 	private Config cf;
 	private Swagger swagger;
 	private SerializerSessionArgs serializerSessionArgs;
@@ -198,10 +198,10 @@ public final class RestRequest extends HttpServletRequestWrapper {
 			.addDefault(rjm.defaultQuery)
 			.parser(rjm.partParser);
 		this.headers
-			.addDefault(rjm.defaultRequestHeaders)
-			.addDefault(context.getDefaultRequestHeaders())
+			.addDefault(rjm.reqHeaders)
+			.addDefault(context.getReqHeaders())
 			.parser(rjm.partParser);
-		this.attributes = new RequestAttributes(this, rjm.defaultRequestAttributes);
+		this.attrs = new RequestAttributes(this, rjm.reqAttrs);
 		this.body
 			.encoders(rjm.encoders)
 			.parsers(rjm.parsers)
@@ -510,7 +510,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 	 * 	<br>Never <jk>null</jk>.
 	 */
 	public RequestAttributes getAttributes() {
-		return attributes;
+		return attrs;
 	}
 
 	/**
@@ -1689,7 +1689,7 @@ public final class RestRequest extends HttpServletRequestWrapper {
 			sb.append("\t").append(h).append(": ").append(getHeader(h)).append("\n");
 		}
 		sb.append("---Default Servlet Headers---\n");
-		for (Map.Entry<String,Object> e : context.getDefaultRequestHeaders().entrySet()) {
+		for (Map.Entry<String,Object> e : context.getReqHeaders().entrySet()) {
 			sb.append("\t").append(e.getKey()).append(": ").append(e.getValue()).append("\n");
 		}
 		if (javaMethod == null) {
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index e182d46..a68160c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -80,7 +80,7 @@ public final class RestResponse extends HttpServletResponseWrapper {
 		this.inner = res;
 		this.request = req;
 
-		for (Map.Entry<String,Object> e : context.getDefaultResponseHeaders().entrySet())
+		for (Map.Entry<String,Object> e : context.getResHeaders().entrySet())
 			setHeaderSafe(e.getKey(), stringify(e.getValue()));
 
 		try {
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 44186de..a710948 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
@@ -151,20 +151,10 @@ public @interface Rest {
 
 	/**
 	 * Default request attributes.
-	 *
-	 * <p>
-	 * Specifies default values for request attributes if they're not already set on the request.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #reqAttrs()}
 	 */
+	@Deprecated
 	String[] attrs() default {};
 
 	/**
@@ -261,7 +251,7 @@ public @interface Rest {
 	 * The default value for the <c>Accept</c> header if not specified on a request.
 	 *
 	 * <p>
-	 * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+	 * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
 	 *
 	 * <ul class='notes'>
 	 * 	<li>
@@ -296,7 +286,7 @@ public @interface Rest {
 	 * The default value for the <c>Content-Type</c> header if not specified on a request.
 	 *
 	 * <p>
-	 * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+	 * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
 	 *
 	 * <ul class='notes'>
 	 * 	<li>
@@ -308,38 +298,18 @@ public @interface Rest {
 
 	/**
 	 * Default request headers.
-	 *
-	 * <p>
-	 * Specifies default values for request headers if they're not passed in through the request.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #reqHeaders()}
 	 */
+	@Deprecated
 	String[] defaultRequestHeaders() default {};
 
 	/**
 	 * Default response headers.
-	 *
-	 * <p>
-	 * Specifies default values for response headers if they're not set after the Java REST method is called.
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #resHeaders()}
 	 */
+	@Deprecated
 	String[] defaultResponseHeaders() default {};
 
 	/**
@@ -719,6 +689,60 @@ public @interface Rest {
 	String renderResponseStackTraces() default "";
 
 	/**
+	 * Default request attributes.
+	 *
+	 * <p>
+	 * Specifies default values for request attributes if they're not already set on the request.
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
+	 * </ul>
+	 */
+	String[] reqAttrs() default {};
+
+	/**
+	 * Default request headers.
+	 *
+	 * <p>
+	 * Specifies default values for request headers if they're not passed in through the request.
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
+	 * </ul>
+	 */
+	String[] reqHeaders() default {};
+
+	/**
+	 * Default response headers.
+	 *
+	 * <p>
+	 * Specifies default values for response headers if they're not set after the Java REST method is called.
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$L{my.localized.variable}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_resHeaders}
+	 * </ul>
+	 */
+	String[] resHeaders() default {};
+
+	/**
 	 * REST resource resolver.
 	 *
 	 * <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
index cdcf9e6..e5c3e12 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
@@ -48,6 +48,7 @@ public class RestConfigApply extends ConfigApply<Rest> {
 		super(c, r);
 	}
 
+	@SuppressWarnings("deprecation")
 	@Override
 	public void apply(AnnotationInfo<Rest> ai, PropertyStoreBuilder psb) {
 		Rest a = ai.getAnnotation();
@@ -92,6 +93,14 @@ public class RestConfigApply extends ConfigApply<Rest> {
 				psb.addTo(REST_attrs, ra2[0], ra2[1]);
 		}
 
+		for (String ra : strings(a.reqAttrs())) {
+			String[] ra2 = RestUtils.parseKeyValuePair(ra);
+			if (ra2 == null)
+				throw new FormattedRuntimeException("Invalid default request attribute specified: ''{0}''.  Must be in the format: ''Name: value''", ra);
+			if (isNotEmpty(ra2[1]))
+				psb.addTo(REST_reqAttrs, ra2[0], ra2[1]);
+		}
+
 		for (String header : strings(a.defaultRequestHeaders())) {
 			String[] h = RestUtils.parseHeader(header);
 			if (h == null)
@@ -100,16 +109,24 @@ public class RestConfigApply extends ConfigApply<Rest> {
 				psb.addTo(REST_defaultRequestHeaders, h[0], h[1]);
 		}
 
+		for (String header : strings(a.reqHeaders())) {
+			String[] h = RestUtils.parseHeader(header);
+			if (h == null)
+				throw new FormattedRuntimeException("Invalid default request header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
+			if (isNotEmpty(h[1]))
+				psb.addTo(REST_reqHeaders, h[0], h[1]);
+		}
+
 		if (a.defaultAccept().length() > 0) {
 			s = string(a.defaultAccept());
 			if (isNotEmpty(s))
-				psb.addTo(REST_defaultRequestHeaders, "Accept", s);
+				psb.addTo(REST_reqHeaders, "Accept", s);
 		}
 
 		if (a.defaultContentType().length() > 0) {
 			s = string(a.defaultContentType());
 			if (isNotEmpty(s))
-				psb.addTo(REST_defaultRequestHeaders, "Content-Type", s);
+				psb.addTo(REST_reqHeaders, "Content-Type", s);
 
 		}
 
@@ -121,6 +138,14 @@ public class RestConfigApply extends ConfigApply<Rest> {
 				psb.addTo(REST_defaultResponseHeaders, h[0], h[1]);
 		}
 
+		for (String header : strings(a.resHeaders())) {
+			String[] h = parseHeader(header);
+			if (h == null)
+				throw new FormattedRuntimeException("Invalid default response header specified: ''{0}''.  Must be in the format: ''Header-Name: header-value''", header);
+			if (isNotEmpty(h[1]))
+				psb.addTo(REST_resHeaders, h[0], h[1]);
+		}
+
 		psb.addTo(REST_responseHandlers, a.responseHandlers());
 
 		psb.addTo(REST_converters, a.converters());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
index df88cde..d177480 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethod.java
@@ -39,27 +39,10 @@ public @interface RestMethod {
 
 	/**
 	 * Default request attributes.
-	 *
-	 * <p>
-	 * Specifies default values for request attributes if they're not already set on the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, attrs={<js>"Foo: bar"</js>})
-	 * 	<jk>public</jk> String doGet()  {...}
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #reqAttrs()}
 	 */
+	@Deprecated
 	String[] attrs() default {};
 
 	/**
@@ -202,7 +185,7 @@ public @interface RestMethod {
 	 * The default value for the <c>Accept</c> header if not specified on a request.
 	 *
 	 * <p>
-	 * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+	 * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
 	 */
 	String defaultAccept() default "";
 
@@ -231,7 +214,7 @@ public @interface RestMethod {
 	 * The default value for the <c>Content-Type</c> header if not specified on a request.
 	 *
 	 * <p>
-	 * This is a shortcut for using {@link #defaultRequestHeaders()} for just this specific header.
+	 * This is a shortcut for using {@link #reqHeaders()} for just this specific header.
 	 */
 	String defaultContentType() default "";
 
@@ -292,27 +275,10 @@ public @interface RestMethod {
 
 	/**
 	 * Default request headers.
-	 *
-	 * <p>
-	 * Specifies default values for request headers if they're not passed in through the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
-	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, defaultRequestHeaders={<js>"Accept: text/json"</js>})
-	 * 	<jk>public</jk> String doGet()  {...}
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Supports {@doc DefaultRestSvlVariables}
-	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
-	 * </ul>
+	 * 
+	 * @deprecated Use {@link #reqHeaders()}
 	 */
+	@Deprecated
 	String[] defaultRequestHeaders() default {};
 
 	/**
@@ -641,6 +607,56 @@ public @interface RestMethod {
 	Property[] properties() default {};
 
 	/**
+	 * Default request attributes.
+	 *
+	 * <p>
+	 * Specifies default values for request attributes if they're not already set on the request.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
+	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqAttrs={<js>"Foo: bar"</js>})
+	 * 	<jk>public</jk> String doGet()  {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
+	 * </ul>
+	 */
+	String[] reqAttrs() default {};
+
+	/**
+	 * Default request headers.
+	 *
+	 * <p>
+	 * Specifies default values for request headers if they're not passed in through the request.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Assume "text/json" Accept value when Accept not specified</jc>
+	 * 	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, reqHeaders={<js>"Accept: text/json"</js>})
+	 * 	<jk>public</jk> String doGet()  {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Supports {@doc DefaultRestSvlVariables}
+	 * 		(e.g. <js>"$S{mySystemProperty}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
+	 * </ul>
+	 */
+	String[] reqHeaders() default {};
+
+	/**
 	 * Declared roles.
 	 *
 	 * <p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
index eb43cff..d466efc 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestMethodConfigApply.java
@@ -88,16 +88,24 @@ public class RestMethodConfigApply extends ConfigApply<RestMethod> {
 				psb.addTo(REST_defaultRequestHeaders, h[0], h[1]);
 		}
 
+		for (String header : strings(a.reqHeaders())) {
+			String[] h = RestUtils.parseHeader(header);
+			if (h == null)
+				throw new ConfigException("Invalid default request header specified on method ''{0}'': ''{1}''.  Must be in the format: ''Header-Name: header-value''", sig, header);
+			if (isNotEmpty(h[1]))
+				psb.addTo(REST_reqHeaders, h[0], h[1]);
+		}
+
 		if (a.defaultAccept().length() > 0) {
 			s = string(a.defaultAccept());
 			if (isNotEmpty(s))
-				psb.addTo(REST_defaultRequestHeaders, "Accept", s);
+				psb.addTo(REST_reqHeaders, "Accept", s);
 		}
 
 		if (a.defaultContentType().length() > 0) {
 			s = string(a.defaultContentType());
 			if (isNotEmpty(s))
-				psb.addTo(REST_defaultRequestHeaders, "Content-Type", s);
+				psb.addTo(REST_reqHeaders, "Content-Type", s);
 		}
 
 		psb.addTo(REST_converters, a.converters());
@@ -167,6 +175,14 @@ public class RestMethodConfigApply extends ConfigApply<RestMethod> {
 			psb.addTo(RESTMETHOD_defaultRequestHeaders, h2[0], h2[1]);
 		}
 
+		for (String h : a.reqHeaders()) {
+			String[] h2 = RestUtils.parseKeyValuePair(string(h));
+			if (h2 == null)
+				throw new ConfigException(
+					"Invalid default request header specified on method ''{0}'': ''{1}''.  Must be in the format: ''name[:=]value''", sig, s);
+			psb.addTo(RESTMETHOD_reqHeaders, h2[0], h2[1]);
+		}
+
 		for (String ra : a.attrs()) {
 			String[] ra2 = RestUtils.parseKeyValuePair(string(ra));
 			if (ra2 == null)
@@ -175,11 +191,19 @@ public class RestMethodConfigApply extends ConfigApply<RestMethod> {
 			psb.addTo(RESTMETHOD_attrs, ra2[0], ra2[1]);
 		}
 
+		for (String ra : a.reqAttrs()) {
+			String[] ra2 = RestUtils.parseKeyValuePair(string(ra));
+			if (ra2 == null)
+				throw new ConfigException(
+					"Invalid default request attribute specified on method ''{0}'': ''{1}''.  Must be in the format: ''name[:=]value''", sig, s);
+			psb.addTo(RESTMETHOD_reqAttrs, ra2[0], ra2[1]);
+		}
+
 		if (! a.defaultAccept().isEmpty())
-			psb.addTo(RESTMETHOD_defaultRequestHeaders, "Accept", string(a.defaultAccept()));
+			psb.addTo(RESTMETHOD_reqHeaders, "Accept", string(a.defaultAccept()));
 
 		if (! a.defaultContentType().isEmpty())
-			psb.addTo(RESTMETHOD_defaultRequestHeaders, string(a.defaultContentType()));
+			psb.addTo(RESTMETHOD_reqHeaders, string(a.defaultContentType()));
 
 		for (String h : a.defaultQuery()) {
 			String[] h2 = RestUtils.parseKeyValuePair(string(h));
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 072505b..af2b561 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -196,7 +196,7 @@ public @interface RestResource {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_attrs}
+	 * 	<li class='jf'>{@link RestContext#REST_reqAttrs}
 	 * </ul>
 	 */
 	String[] attrs() default {};
@@ -368,7 +368,7 @@ public @interface RestResource {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultRequestHeaders}
+	 * 	<li class='jf'>{@link RestContext#REST_reqHeaders}
 	 * </ul>
 	 */
 	String[] defaultRequestHeaders() default {};
@@ -386,7 +386,7 @@ public @interface RestResource {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link RestContext#REST_defaultResponseHeaders}
+	 * 	<li class='jf'>{@link RestContext#REST_resHeaders}
 	 * </ul>
 	 */
 	String[] defaultResponseHeaders() default {};