Skip to content

Commit

Permalink
Added support for mapping of uploaded files into REST service params.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Jul 12, 2015
1 parent 0863032 commit 412312b
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 14 deletions.
4 changes: 4 additions & 0 deletions rapidoid-cls/src/main/java/org/rapidoid/cls/Cls.java
Expand Up @@ -647,6 +647,10 @@ public static <T> T convert(Object value, Class<T> toType) {
case STRING: case STRING:
if (value instanceof Date) { if (value instanceof Date) {
return (T) Dates.str((Date) value); return (T) Dates.str((Date) value);
} else if (value instanceof byte[]) {
return (T) new String((byte[]) value);
} else if (value instanceof char[]) {
return (T) new String((char[]) value);
} else { } else {
return (T) U.readable(value); return (T) U.readable(value);
} }
Expand Down
Expand Up @@ -33,6 +33,6 @@ public interface PojoRequest {


String path(); String path();


Map<String, String> params(); Map<String, Object> params();


} }
Expand Up @@ -150,7 +150,7 @@ private Object[] setupArgs(PojoRequest request, Method method, Object service, S


if (param != null) { if (param != null) {
String paramName = param.value(); String paramName = param.value();
String val = request.params().get(paramName); Object val = request.params().get(paramName);
args[i] = Cls.convert(val, type); args[i] = Cls.convert(val, type);
} else if (isCustomSimpleArg(request, annotations[i])) { } else if (isCustomSimpleArg(request, annotations[i])) {
args[i] = Cls.convert(customSimpleArg(request, annotations[i]), type); args[i] = Cls.convert(customSimpleArg(request, annotations[i]), type);
Expand Down Expand Up @@ -293,12 +293,13 @@ private String[] stringsArg(PojoRequest request, String[] parts, int paramsFrom,
} }
} }


private Map<String, String> mapArg(PojoRequest request, String[] parts, int paramsFrom) { private Map<String, Object> mapArg(PojoRequest request, String[] parts, int paramsFrom) {
Map<String, String> params = request.params(); Map<String, Object> params = request.params();


for (int j = paramsFrom; j < parts.length; j++) { for (int j = paramsFrom; j < parts.length; j++) {
params.put("" + (j - paramsFrom + 1), parts[j]); params.put("" + (j - paramsFrom + 1), parts[j]);
} }

return params; return params;
} }


Expand All @@ -316,10 +317,10 @@ private boolean shouldExpose(Method method) {
return isUserDefined && isPublic; return isUserDefined && isPublic;
} }


private static void setBeanProperties(Object instance, Map<String, String> paramsMap) { private static void setBeanProperties(Object instance, Map<String, Object> paramsMap) {
BeanProperties props = Beany.propertiesOf(instance.getClass()); BeanProperties props = Beany.propertiesOf(instance.getClass());


for (Entry<String, String> entry : paramsMap.entrySet()) { for (Entry<String, Object> entry : paramsMap.entrySet()) {
Prop prop = props.get(entry.getKey()); Prop prop = props.get(entry.getKey());
if (prop != null) { if (prop != null) {
Object value = entry.getValue(); Object value = entry.getValue();
Expand Down
Expand Up @@ -32,9 +32,9 @@ public class PojoRequestImpl implements PojoRequest {


private final String command; private final String command;
private final String path; private final String path;
private final Map<String, String> params; private final Map<String, Object> params;


public PojoRequestImpl(String command, String path, Map<String, String> params) { public PojoRequestImpl(String command, String path, Map<String, Object> params) {
this.command = command; this.command = command;
this.path = path; this.path = path;
this.params = params; this.params = params;
Expand All @@ -51,7 +51,7 @@ public String path() {
} }


@Override @Override
public Map<String, String> params() { public Map<String, Object> params() {
return params; return params;
} }


Expand Down
Expand Up @@ -83,17 +83,17 @@ public interface HttpExchange {
byte[] file(String name, byte[] defaultValue); byte[] file(String name, byte[] defaultValue);


/** /**
* Data includes params + data. * Data includes params + posted.
*/ */
Map<String, String> data(); Map<String, String> data();


/** /**
* Data includes params + data. * Data includes params + posted.
*/ */
String data(String name); String data(String name);


/** /**
* Data includes params + data. * Data includes params + posted.
*/ */
String data(String name, String defaultValue); String data(String name, String defaultValue);


Expand Down
10 changes: 8 additions & 2 deletions rapidoid-rest/src/main/java/org/rapidoid/rest/WebReq.java
Expand Up @@ -26,6 +26,7 @@
import org.rapidoid.annotation.Since; import org.rapidoid.annotation.Since;
import org.rapidoid.dispatch.PojoRequest; import org.rapidoid.dispatch.PojoRequest;
import org.rapidoid.http.HttpExchange; import org.rapidoid.http.HttpExchange;
import org.rapidoid.util.U;


@Authors("Nikolche Mihajlovski") @Authors("Nikolche Mihajlovski")
@Since("2.0.0") @Since("2.0.0")
Expand All @@ -48,8 +49,13 @@ public String path() {
} }


@Override @Override
public Map<String, String> params() { public Map<String, Object> params() {
return exchange.data(); Map<String, Object> params = U.map();

params.putAll(exchange.data());
params.putAll(exchange.files());

return params;
} }


public HttpExchange getExchange() { public HttpExchange getExchange() {
Expand Down

0 comments on commit 412312b

Please sign in to comment.