O
- the type of option object this parser acceptspublic abstract class ParserSupport<O> extends Object implements Parser<O>
Parser
implementations.
Specializations only need to implement the Parser.parse(ratpack.handling.Context, ratpack.http.TypedData, Parse)
method.
import ratpack.handling.Handler; import ratpack.handling.Context; import ratpack.http.TypedData; import ratpack.parse.Parse; import ratpack.parse.ParserSupport; import ratpack.parse.ParseException; import ratpack.util.Types; import ratpack.func.Action; import ratpack.registry.RegistrySpec; import java.io.UnsupportedEncodingException; import ratpack.test.UnitTest; import ratpack.test.handling.HandlingResult; import ratpack.test.handling.RequestFixture; public class Example { // The parse options public static class StringParseOpts { private int maxLength; public StringParseOpts(int maxLength) { this.maxLength = maxLength; } public int getMaxLength() { return maxLength; } } // A parser for this type public static class MaxLengthStringParser extends ParserSupport<StringParseOpts> { public MaxLengthStringParser() { super("text/plain"); } public <T> T parse(Context context, TypedData requestBody, Parse<T, StringParseOpts> parse) throws UnsupportedEncodingException { if (!parse.getType().getRawType().equals(String.class)) { return null; } String rawString = requestBody.getText(); if (rawString.length() < parse.getOpts().getMaxLength()) { return Types.cast(rawString); } else { return Types.cast(rawString.substring(0, parse.getOpts().getMaxLength())); } } } public static class ToUpperCaseHandler implements Handler { public void handle(Context context) throws ParseException { String string = context.parse(String.class, new StringParseOpts(5)); context.render(string); } } // unit test public static void main(String[] args) throws Exception { HandlingResult result = UnitTest.handle(new ToUpperCaseHandler(), new Action<RequestFixture>() { public void execute(RequestFixture fixture) throws Exception { fixture .body("123456", "text/plain") .registry(new Action<RegistrySpec>() { public void execute(RegistrySpec registry) { registry.add(new MaxLengthStringParser()); } }); } }); assert result.rendered(String.class).equals("12345"); } }
NoOptParserSupport
Modifier | Constructor and Description |
---|---|
protected |
ParserSupport(String contentType)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
String |
getContentType()
The content type that this parser knows how to deserialize.
|
Class<O> |
getOptsType()
The type of option object that this parser accepts.
|
protected ParserSupport(String contentType)
contentType
- the type of request this parser can handlepublic final String getContentType()
getContentType
in interface Parser<O>
public final Class<O> getOptsType()
getOptsType
in interface Parser<O>
ParserSupport