JSONなどを使用していません。ファイルをアップロードする簡単なフォームがあり、フォームのパラメーターを読み取りたい。以下のコードは期待どおりに機能していません。パラメーターは表示されません。
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("{appNum}/{docId}/file")
public Response uploadDocFile(
@PathParam("appNum") String appNum,
@PathParam("docId") String docId,
@Context HttpServletRequest req)
{
try {
log.info("POST Parameters:");
Enumeration e = req.getParameterNames();
while(e.hasMoreElements())
{
Object key = e.nextElement();
log.info("Key: " + key);
log.info("Val: " + req.getParameter(key.toString()));
}
} catch (Exception e) {
e.printStackTrace();
return Response.status(Status.INTERNAL_SERVER_ERROR).entity(new StatusResponse(e)).build();
}
return Response.ok().build();
}
私は同じ問題を抱えています。個々のパラメーターに@FormParam
注釈を使用しても機能しますが、@Context
を介して挿入されたHttpServletRequest
からそれらを読み取ることはできません。また、Provider<HttpServletRequest>
および@RequestParameters<Map<String, String[]>>
を使用して、Guiceを介して要求オブジェクト/パラメーターを取得しようとしました。どちらの場合も、投稿パラメーターはありませんでした。
ただし、MultivaluedMap<String, String>
パラメーターをリソースメソッドに追加することにより、パラメーターのマップを取得することができます。例:
@POST
public void doSomething(MultivaluedMap<String, String> formParams) {
//...
}
Jersey RESTful API in Javaを探すことができます Parameter Annotations(@ * Param)
例:
依存:
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version>
</dependency>
コード:
package yourpack;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@Path("/path_to_data")
public class DataResource {
@GET
@Path("/{param}")
public Response getMsg(@PathParam("param") String urlparam) {
int ok = 200;
String result = "Jersey Data resource: " + urlparam;
return Response.status(ok).entity(result ).build();
}
}
注釈のリスト:@ MatrixParam、@ HeaderParam、@ CookieParam、@ FormParam、@ QueryParam、@ PathParam
ある時点で、Jersey ContainerServlet(または要求処理中の他のJerseyオブジェクト)は、「usingInputStream」または「usingReader」をTRUEに設定するrequest.getInputStream()またはrequest.getReader()を呼び出します。この状態により、リクエストオブジェクト内にパラメータマップが入力されなくなります。このようなもの:
parseParameters() {
if (usingInputStream || usingReader) {
return;
} else {
parametersMap.putAll({actual parameters parsing from stream})
}
}
Map getParametersMap() {
return parametersMap;
}
アプリケーションの最初のエントリポイント(Jersey ServletContainer.service()メソッドの先頭)にブレークポイントを配置して、request.getParametersMap()呼び出しを評価してください。パラメータを取得します。