2017-03-27 1 views
1

저는 JSON의 초보자입니다. 나는 다음 코드를 @GET에서 @POST로 어떻게 변환 할 수 있는지 묻고 싶습니다. 그래서 링크가 아닌 사용자 JSON 입력에서 appdataid를 검색 할 수 있습니다. 내가 @POST 및 JSON 형식으로 사용자 입력을받을 수 있기를 바랍니다 결과@GET 대신 @POST를 사용하여 사용자 입력

{ 
     "id": 1, 
     "message": " ", 
     "status": "Success", 
     "token": "123456" 
} 

에 대한 http://localhost:8080/gni/webapi/appdata/1를 입력

AppDataService ads = new AppDataService(); 
@GET 
@Path("/{appdataid}") 
@Produces(MediaType.APPLICATION_JSON) 
public AppData getAppData(@PathParam("appdataid")long appdataid){ 
    return ads.getAppData(appdataid); 
} 

public AppDataService(){ 
     appdatas.put(1L, new AppData(1,"Success", " ", "123456")); 
     appdatas.put(2L, new AppData(2,"Failure", " ", "654321")); 
    } 
public AppData getAppData(long id){ 
     return appdatas.get(id); 
    } 

AppDataService

에 대한 코드 대신 사용자. 다음 코드를 시도했지만 작동하지 않습니다.

@POST 
@Path("/{appdataid}") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public AppData getAppData(@PathParam("appdataid")long appdataid){ 
    return ads.getAppData(appdataid); 
} 

저를 도울 수있는 모든 분들께 감사드립니다.

+2

1. * "작동하지 않음"은 무엇을 의미합니까? 적절한 문제 설명이 아닙니다. 2. * "@ POST를 통해 사용자 JSON 입력에서 appdataid를 검색 할 수 있습니다"* 무엇을 의미합니까? '@ POST' 또는'@ GET'은 JSON 메시지의 내용과 관련이 있습니다. – UnholySheep

+0

이 기존 StackOverflow 질문을 확인하십시오. http://stackoverflow.com/a/8194612/695787 – Jameson

+0

@ POST 메서드를 사용하여 다른 것을 수락하는 것 같지 않습니까? 여전히 @PathParam을 입력으로 사용하고 있습니다. 그 이유는 - 왜 이것을 @ POST 고유로하고 싶습니까? 지금은 그것이 네쎄다는 것을 나타내는 것은 아무것도 없습니다. 또한 내가 말할 수있는 한 JSON 입력이 없다. :-). – vegaasen

답변

1

, 당신은 예를 들어, POJO를 정의 할 필요가 :

자원에 대한
public class AppDataRequest { 
    @JsonProperty 
    private long id; 

    public long getId() { 
     return id; 
    } 
} 

사용이 유형 :

@POST 
@Path("/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public AppData getAppData(AppDataRequest appDataRequest){ 
    return ads.getAppData(appDataRequest.getId()); 
} 

은 참고 @Path 주석이 더 이상 appdataid이 템플릿이 없으며, 매개 변수는 주석이 없습니다.


SIDE 참고 난 당신이 여기 달성 하려는지 궁금 할

. HTTP 메소드는 시스템의 작동을 설명하는 데 도움이 될 수 있으며 사용되어야합니다. 데이터를 가져 오기 위해서는 GET 리소스를 사용해야합니다. POST 리소스를 사용하여 새 데이터를 생성해야합니다. 때로는이 규칙을 위반할만한 좋은 이유가 있습니다 (예 : GET 요청에서 메시지 본문이 부족한 경우). 그러나 일반적으로 다른 방법이 있습니다. 귀하의 예에 관한 모든 내용은 내게 그것이 GET 요청이어야한다고 말하지만, 귀하의 신청 내용을 알지 못하므로, 적용하지 않으면이를 무시하십시오.

+0

이 상황에서 POST를 사용하는 것이 유일한 이유는 보안입니다 (https를 사용하지 않으면 틀림없이 POST가 약간 안전합니다) –

+0

안녕하세요. @Michael Peyper 답장을 보내 주셔서 감사합니다. 다른 사용자를 얻으려고하면 게시물을 사용하여 JSON 형식으로 입력 한 내용에 따라 다른 출력을 받게됩니다. 나는 당신의 대답을 시도 할 것입니다. 감사. –

+0

안녕하세요. @ 마이클 페이퍼. 귀하의 답변에 감사드립니다. 그것은 내가 원하는 방식으로 작동합니다. –

0

JSON이 실제로 필요하지 않다고 생각합니다. 당신은 같은 간단한 페이로드에 대한 @FormParam을 사용할 수 있습니다 당신은 콘솔에서 웹 서비스를 호출 할 수 있습니다

@POST 
@Path("some_url") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)//optional 
public AppData getAppData(@FormParam("appdataid")long appdataid){ 
    return ads.getAppData(appdataid); 
} 

(ID)

WebTarget target = client.target(UriBuilder.fromUri("http://localhost:8088/Your_root_url").build()); 

try{ 

MultivaluedMap<String, Integer> formData = new MultivaluedHashMap<String, String>(); 

formData.add("appdataid", 1); 

Response res= target.path("some_url").request(). 
post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); 

AppData entity = (AppData) res.readEntity(AppData.class); 

//System.out.println(entity);//if toString() is overriden 


}catch(Exception e){ 

System.out.println(e); 

return; 

} 

편집을 (뉴저지 가정) : 내가하고 싶은에 대해 볼 수있는 유일한 이유 이에 메시지 본문을 deserialise하는이 상황에서 POST를 사용하는 securiry (그리고 심지어는 논쟁의 여지가있다) 당신이 당신의 리소스에 JSON을 게시 할 경우

+0

안녕하세요. @dsp_user. 답장을 보내 주셔서 감사합니다. 예. 자네 말이 맞아, JSON 형식의 특정 입력을 기반으로 사용자가 정보를 검색 할 수있게하고 싶다. 귀하의 답변 주셔서 감사합니다, 나는 그것을 시도합니다. –

관련 문제