Ich habe Filter implementiert und ich habe getEntityStream von ContainerRequestContext aufgerufen und setzen Sie den genauen Wert zurück mit SetEntityStream. Wenn ich diesen Filter verwende, werden @FormParameter-Daten zu null und wenn ich keinen Filter verwende, dann ist alles in Ordnung (da ich nicht getEntityStream aufruft) und ich muss einen Filter verwenden, um Anforderungsdaten zu erfassen.@FormParameter Daten wird Null nach dem Lesen und Festlegen der gleichen Daten in ContainerRequestContext entityStream
Hinweis: Ich erhalte Formparameter von MultivaluedMap formParams, aber nicht von @FormParameter.
Umgebung: - Rest Easy API mit Jboss Wildfly 8 Server.
@Provider
@Priority(Priorities.LOGGING)
public class CustomLoggingFilter implements ContainerRequestFilter, ContainerResponseFilter{
final static Logger log = Logger.getLogger(CustomLoggingFilter.class);
@Context
private ResourceInfo resourceInfo;
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
MDC.put("start-time", String.valueOf(System.currentTimeMillis()));
String entityParameter = readEntityStream(requestContext);
log.info("Entity Parameter :"+entityParameter);
}
private String readEntityStream(ContainerRequestContext requestContext){
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
final InputStream inputStream = requestContext.getEntityStream();
final StringBuilder builder = new StringBuilder();
int read=0;
final byte[] data = new byte[4096];
try {
while ((read = inputStream.read(data)) != -1) {
outStream.write(data, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
}
byte[] requestEntity = outStream.toByteArray();
if (requestEntity.length == 0) {
builder.append("");
} else {
builder.append(new String(requestEntity));
}
requestContext.setEntityStream(new ByteArrayInputStream(requestEntity));
return builder.toString();
}
return null;
}
}
class customResource
{
//// This code is not working
@POST
@Path("voiceCallBack")
@ApiOperation(value = "Voice call back from Twilio")
public void voiceCallback(@FormParam("param") String param)
{
log.info("param:" + param);
}
// This code is working
@POST
@Path("voiceCallBackMap")
@ApiOperation(value = "Voice call back from Twilio")
public void voiceCallbackMap(final MultivaluedMap<String, String> formParams)
{
String param = formParams.getFirst("param");
}
}
bitte schlagen Sie mir Lösung & Vielen Dank im Voraus.
Dank Es funktioniert gut. aber ich verstehe den Unterschied zwischen beiden nicht. Hast du eine Idee, warum passiert das? – user7369265
bearbeitet die Antwort. –