簡體   English   中英

HttpServletRequest.getParamter()在CXF Restful Service(Post)中返回null

[英]HttpServletRequest.getParamter() return null in CXF Restful service(Post)

我使用Apache CXF編寫了Web API。 當我在post方法中使用HttpServletRequest.getParamter()時,它返回null。這是代碼:

@Path("/")
public class TokenService extends DigiwinBaseService {

    private static void printRequest(HttpServletRequest httpRequest) {
        System.out.println("\n\n Headers");
        Enumeration headerNames = httpRequest.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = (String) headerNames.nextElement();
            System.out.println(headerName + " = " + httpRequest.getHeader(headerName));
        }
        System.out.println("\n\n Parameters");
        Enumeration params = httpRequest.getParameterNames();
        while (params.hasMoreElements()) {
            String paramName = (String) params.nextElement();
            System.out.println(paramName + " = " + httpRequest.getParameter(paramName));
        }
        System.out.println("\n\n Row data");
        System.out.println(extractPostRequestBody(httpRequest));
    }

    private static String extractPostRequestBody(HttpServletRequest request) {
        if ("POST".equalsIgnoreCase(request.getMethod())) {
            Scanner s = null;
            try {
                s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s.hasNext() ? s.next() : "null";
        }
        return "null";
    }

    @POST
    @Consumes("application/x-www-form-urlencoded")
    public Response Authorize(@FormParam("param") String param,
            @FormParam("param2") String param2,@Context HttpServletRequest httpRequest) throws OAuthSystemException {
        printRequest(httpRequest);
        System.out.println("param:"+param);
        System.out.println("param2:"+param2);       
        return Response.status(HttpServletResponse.SC_OK).entity("OK").build();     
    }
}

這是測試代碼

   public class HttpClientTest {

        public static void main(String[] args) throws Exception{

            String url4 = "/api/services/Test";
            String host = "127.0.0.1";
            HttpClient httpClient = new HttpClient();
            httpClient.getHostConfiguration().setHost(host, 8080, "http");
            HttpMethod method = postMethod(url4);
            httpClient.executeMethod(method);       
            String response = method.getResponseBodyAsString();
            System.out.println(response);
        }

        private static HttpMethod postMethod(String url) throws IOException{ 
            PostMethod post = new PostMethod(url);
            post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");  
            NameValuePair[] param = { 
                    new NameValuePair("param","param1"),
                    new NameValuePair("param2","param2"),} ;
            post.setRequestBody(param);
            post.releaseConnection();
            return post;
        }
    }

這是打印輸出:

Headers
content-type = application/x-www-form-urlencoded;charset=gbk
user-agent = Jakarta Commons-HttpClient/3.1
host = 127.0.0.1:8080
content-length = 26

Parameters

Row data
null

param:param1
param2:param2

為什么參數為空? 我如何使用HttpServletRequest.getParamter()獲取發布參數

CXF正在使用POST數據來填充FormParam。

https://issues.apache.org/jira/browse/CXF-2993

解決方案是“無法解決” 在本期中,他們建議使用MultivaluedMap恢復所有參數,或者僅使用HttpServletRequest

選項1

@POST
@Consumes("application/x-www-form-urlencoded")
public Response Authorize( MultivaluedMap<String, String> parameterMap, @Context HttpServletRequest httpRequest) throws OAuthSystemException {
     //parameterMap has your POST parameters

選項2

@POST
@Consumes("application/x-www-form-urlencoded")
public Response Authorize( @Context HttpServletRequest httpRequest) throws OAuthSystemException {
    //httpRequest.getParameterMap() has your POST parameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM