/* * Copyright 2013 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package feign.codec; /** * Encodes an object into an HTTP request body. Like * {@code javax.websocket.Encoder}.
* {@code Encoder} is used when a method parameter has no {@code *Param} * annotation. For example:
*

*

 * @POST
 * @Path("/")
 * void create(User user);
 * 
*

*

Form encoding

*
* If any parameters are found in {@link feign.MethodMetadata#formParams()}, they will be * collected and passed to {@code Encoder.Text>}. *
*
 * @POST
 * @Path("/")
 * Session login(@Named("username") String username, @Named("password") String password);
 * 
* * @param widest type an instance of this can encode. */ public interface Encoder { /** * Converts objects to an appropriate text representation.
* Ex.
*

*

   * public class GsonEncoder implements Encoder.Text<Object> {
   *     private final Gson gson;
   *
   *     public GsonEncoder(Gson gson) {
   *         this.gson = gson;
   *     }
   *
   *     @Override
   *     public String encode(Object object) {
   *         return gson.toJson(object);
   *     }
   * }
   * 
*/ interface Text extends Encoder { /** * Implement this to encode an object as a String.. If you need to wrap * exceptions, please do so via {@link EncodeException} * * @param object what to encode as the request body. * @return the encoded object as a string. * @throws EncodeException * when encoding failed due to a checked exception. */ String encode(T object) throws EncodeException; } }