001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.juneau.rest.config; 018 019import org.apache.juneau.annotation.*; 020import org.apache.juneau.csv.*; 021import org.apache.juneau.html.*; 022import org.apache.juneau.html.annotation.*; 023import org.apache.juneau.json.*; 024import org.apache.juneau.msgpack.*; 025import org.apache.juneau.oapi.*; 026import org.apache.juneau.plaintext.*; 027import org.apache.juneau.rest.annotation.*; 028import org.apache.juneau.rest.servlet.*; 029import org.apache.juneau.serializer.annotation.*; 030import org.apache.juneau.soap.*; 031import org.apache.juneau.uon.*; 032import org.apache.juneau.urlencoding.*; 033import org.apache.juneau.xml.*; 034 035/** 036 * Predefined configuration for a REST resource that supports all languages 037 * and provides common default configuration values. 038 * 039 * <p> 040 * Default settings defined: 041 * </p> 042 * <ul class='spaced-list'> 043 * <li class='ja'>{@link Rest}: 044 * <ul> 045 * <li class='jma'>{@link Rest#serializers() serializers}: 046 * <ul class='javatree'> 047 * <li class='jc'>{@link HtmlDocSerializer} 048 * <li class='jc'>{@link HtmlStrippedDocSerializer} 049 * <li class='jc'>{@link HtmlSchemaDocSerializer} 050 * <li class='jc'>{@link JsonSerializer} 051 * <li class='jc'>{@link Json5Serializer} 052 * <li class='jc'>{@link JsonSchemaSerializer} 053 * <li class='jc'>{@link XmlDocSerializer} 054 * <li class='jc'>{@link UonSerializer} 055 * <li class='jc'>{@link UrlEncodingSerializer} 056 * <li class='jc'>{@link OpenApiSerializer} 057 * <li class='jc'>{@link MsgPackSerializer} 058 * <li class='jc'>{@link SoapXmlSerializer} 059 * <li class='jc'>{@link PlainTextSerializer} 060 * </ul> 061 * </li> 062 * <li class='jma'>{@link Rest#parsers() parsers}: 063 * <ul class='javatree'> 064 * <li class='jc'>{@link JsonParser} 065 * <li class='jc'>{@link Json5Parser} 066 * <li class='jc'>{@link XmlParser} 067 * <li class='jc'>{@link HtmlParser} 068 * <li class='jc'>{@link UonParser} 069 * <li class='jc'>{@link UrlEncodingParser} 070 * <li class='jc'>{@link OpenApiParser} 071 * <li class='jc'>{@link MsgPackParser} 072 * <li class='jc'>{@link PlainTextParser} 073 * </ul> 074 * </li> 075 * <li class='jma'>{@link Rest#config() config}: <js>"$S{juneau.configFile,SYSTEM_DEFAULT}"</js> 076 * </ul> 077 * </li> 078 * <li class='ja'>{@link BeanConfig}: 079 * <ul> 080 * <li class='jma'>{@link BeanConfig#ignoreUnknownBeanProperties() ignoreUnknownBeanProperties}: <js>"true"</js> 081 * </ul> 082 * </li> 083 * <li class='ja'>{@link SerializerConfig}: 084 * <ul> 085 * <li class='jma'>{@link SerializerConfig#uriResolution() uriResolution}: <js>"ROOT_RELATIVE"</js> 086 * </ul> 087 * </li> 088 * <li class='ja'>{@link HtmlDocConfig}: 089 * <ul> 090 * <li class='jma'>{@link HtmlDocConfig#header() header}: <js>"<h1>$RS{title}</h1><h2>$RS{operationSummary,description}</h2>$C{REST/header}"</js> 091 * <li class='jma'>{@link HtmlDocConfig#navlinks() navlinks}: <js>"up: request:/.."</js> 092 * <li class='jma'>{@link HtmlDocConfig#stylesheet() stylesheet}: <js>"$C{REST/theme,servlet:/htdocs/themes/devops.css}"</js> 093 * <li class='jma'>{@link HtmlDocConfig#head() head}: <js>"$C{REST/head}"</js> 094 * <li class='jma'>{@link HtmlDocConfig#footer() footer}: <js>"$C{REST/footer}"</js> 095 * <li class='jma'>{@link HtmlDocConfig#nowrap() nowrap}: <js>"true"</js> 096 * </ul> 097 * </li> 098 * </ul> 099 * 100 * <p> 101 * This annotation can be applied to REST resource classes to define common default configurations: 102 * </p> 103 * <p class='bjava'> 104 * <jc>// Used on a top-level resource.</jc> 105 * <ja>@Rest</ja> 106 * <jk>public class</jk> MyResource <jk>extends</jk> RestServlet <jk>implements</jk> BasicUniversalConfig { ... } 107 * </p> 108 * <p class='bjava'> 109 * <jc>// Used on a child resource.</jc> 110 * <ja>@Rest</ja> 111 * <jk>public class</jk> MyResource <jk>extends</jk> RestObject <jk>implements</jk> BasicUniversalConfig { ... } 112 * </p> 113 * 114 * <p> 115 * Note that the framework will aggregate annotations defined on all classes in the class hierarchy with 116 * values defined on child classes overriding values defined on parent classes. That allows any values defined 117 * on this interface to be overridden by annotations defined on the implemented class. 118 * </p> 119 * 120 * <h5 class='section'>See Also:</h5><ul> 121 * <ul class='javatreec'> 122 * <li class='jc'>{@link BasicRestServlet} 123 * <li class='jc'>{@link BasicRestServletGroup} 124 * <li class='jc'>{@link BasicRestObject} 125 * <li class='jc'>{@link BasicRestObjectGroup} 126 * </ul> 127 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestAnnotatedClassBasics">@Rest-Annotated Class Basics</a> 128 * </ul> 129 */ 130// @formatter:off 131@Rest( 132 133 // Default serializers for all Java methods in the class. 134 serializers={ 135 HtmlDocSerializer.class, // HTML must be listed first because Internet Explore does not include text/html in their Accept header. 136 HtmlStrippedDocSerializer.class, 137 HtmlSchemaDocSerializer.class, 138 JsonSerializer.class, 139 Json5Serializer.class, 140 JsonSchemaSerializer.class, 141 XmlDocSerializer.class, 142 UonSerializer.class, 143 UrlEncodingSerializer.class, 144 OpenApiSerializer.class, 145 MsgPackSerializer.class, 146 SoapXmlSerializer.class, 147 PlainTextSerializer.class, 148 CsvSerializer.class 149 }, 150 151 // Default parsers for all Java methods in the class. 152 parsers={ 153 JsonParser.class, 154 Json5Parser.class, 155 XmlParser.class, 156 HtmlParser.class, 157 UonParser.class, 158 UrlEncodingParser.class, 159 OpenApiParser.class, 160 MsgPackParser.class, 161 PlainTextParser.class, 162 CsvParser.class 163 } 164) 165public interface BasicUniversalConfig extends DefaultConfig, DefaultHtmlConfig {}