2016-11-24 60 views
0

如何處理json請求並解析dropWizard中的請求參數?在不寫封裝類的情況下解析請求參數

@POST 
@Path("/test") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public String test(@Context final HttpServletRequest request) { 
    JSONObject data=new JSONObject(); 
    System.out.println(request); 
    System.out.println(request.getParameterMap()); 
    System.out.println(">>>>>>>>>"); 

    return "{\"status\":\"ok\"}"; 
} 

我寫了上面的代碼,並嘗試了以下請求。

curl -XPOST -H "Content-Type: application/json" --data {"field1":"val1", "field2":"val2"} http://localhost:8080/test 

request.getParameterMap(){}

如何解析參數,無需編寫一個包裝類?

回答

0

curl命令可能需要圍繞數據一些額外的引號(我發現了一個錯誤,沒有他們):

curl -H "Content-type: application/json" -X POST -d '{"field1":"tal1", "field2":"val2"}' http://localhost:8080/test 

您發送POST要求沒有URL參數。我不知道你爲什麼期待看到那裏的東西。

我不知道您正在使用哪個版本的dropwizard,但我無法使@POST@Path("/something")註釋的組合在註釋方法時表現出來。我得到HTTP ERROR 404

爲了使它工作,我必須將@Path註釋移動到資源/類級別,並且在該方法中只保留@Post註釋。

@Path("/test") 
public class SimpleResource { 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public String test(final String data) throws IOException { 
     System.out.println("And now the request body:"); 
     System.out.println(data); 
     System.out.println(">>>>>>>>>"); 

     return "{\"status\":\"ok\"}"; 
    } 
} 

要得到請求的正文String就像上面那樣做。從這裏取:How to get full REST request body using Jersey?

控制檯看起來像:

INFO [2016-11-24 15:26:29,290] org.eclipse.jetty.server.Server: Started @3539ms 
And now the request body: 
{"field1":"tal1", "field2":"val2"} 
>>>>>>>>> 
相關問題