2014-04-22 3 views
0

저는 Spring을 사용하는 데있어 매우 익숙하며 관련된 모든 일들을 처리하고 있지만이 문제를 해결하려고합니다.JSON 문자열을 이해하기 위해 Spring과 함께 RESTful 웹 서비스 받기

JSON 형식 문자열을 이해하기 위해 Spring MVN 및 Gradle을 사용하여 서비스를 만들려고합니다. 그것은 모두 Java로 만들어졌습니다. 하지만 나는 그것이해야하는 것처럼 작동하도록 할 수는 없습니다.

@RequestMapping(value = "/toggle") 
public @ResponseBody String sendCommand(@RequestParam(value="IP") String IP){ 
//body 
} 

내가 다음 JSON 형식의 문자열

{"IP":"192.168.1.9"} 

를 보낼 때 난 아직도 응답 코드를 400

I를 얻을, 내 컨트롤러의 방법이지만, 예를 들어, @RequestBody 대신 indata에 대해 자체 클래스를 사용하는 다른 변형을 시도했습니다. 그리고 또 다른 곳에서 HttpEntity를 수신하여 String이 올바르게 수신되었는지 여부를 확인합니다. 문자열이 올바르게 수신되는 동안 내 코드를 "읽을"수 없습니다.

내가 로컬 호스트에 갈 수 : 8080/전환 및 변수 설정 HTTP를 통해 말 :

http://localhost:8080/toggle?IP=192.168.1.9 

작품.

어디에서 문제 해결을 계속 하시겠습니까? 미리 감사드립니다.


편집 : 와우. 빠른 답장을 보내 주셔서 감사합니다. 답장을받지 않고 하루나 이틀 만에 나가기를 기대했지만 대신 수분 내에 도움을 받았습니다. 나는이 사이트가 좋았다는 것을 알았지 만, 당신은 훌륭합니다, 고마워요!

즉, Const라고하는 새로운 클래스를 생성했습니다.이 클래스에는 생성자, setter 및 getter가있는 전용 String 변수 만 있습니다. 지금은 비록 같은 문자열을 전송

@RequestMapping(value = "/toggle") 
public @ResponseBody String sendCommand(@RequestBody Ident ident) { 
//body 
} 

나는 아직도 수 400있다.

@PathVariable을 사용하여 작동하는 동안, 나는 이것을 실험하고 있기 때문에 작동하도록하고 싶습니다. 나중에 IP 이상을 보내는 데 사용됩니다.

나는 것들과 관련, 주요 파일에 무언가가 힘을 @ComponentScan @EnableAutoConfiguration 을 사용하고 있습니다 - 잘못 설정 가져옵니다?

+1

당신이해야 확실히 @RequestBody를 사용하고 있습니다. 그 JSON 개체는 잭슨에 의해 deserialize 될 것으로 예상되는 Java 개체를 나타내거나 손으로 파싱 할 계획입니까? – jgitter

+0

서버에서 스택 추적을 얻고 있습니까? 로그를 확인 했습니까? – jgitter

+0

편집 : 형식이 잘못되었으므로 원본 질문에 추가하고 있습니다. – Mattedatten

답변

2

[편안하고 URL 원칙에 따라] 당신은 다른 일에 믹싱 (요청 매개 변수 및 json 객체).

@RequestMapping(value = "/toggle") 
public @ResponseBody String sendCommand(@RequestBody String json){ 
    final YourObject yourObject = mapJsonToObject(json); 
    final String ip = yourObject.getIp(); 
//body 
} 

당신은 또한 JSON에 해당하는 클래스를 만들고 클래스에 그 JSON을 매핑 할 필요 (라이브러리를 사용하여 : 게시 된 {"IP":"192.168.1.9"} 당신은 다음과 같은 작업을 수행해야 잡기 위해

잭슨처럼).

당신은 (내가 코드 청소기를 만드는 것이므로 당신이 제안하지 않는다) 중간 객체의 생성, 당신은 단지 표준 JDK의 방법을 사용하여 JSON 문자열에서 IP를 추출 수를 포기하려는 경우

+0

Jackson과 같은 라이브러리를 사용하는 것은 "필요"하지 않습니다. 나는 그것이 훨씬 깨끗하다는 데 동의한다. – jgitter

+0

기술적으로는 필요 없다는 것은 절대적으로 옳다. 개발자가 그 자체로 쉽게 객체를 생성 할 수있는 간단한 경우이다. – geoand

0

귀하의 방법이 같을 경우,

@RequestMapping(value = "/toggle/{IP}") 
public @ResponseBody String sendCommand(@PathVariable String IP){ 
    //body 
} 

여기에 IP는 전달 IP를 수용 할 수있는 자리 표시 자입니다.

하고 URL 요청해야

HTTP와 같은 : // localhost를 : 8080/전환/192.168.1.9 //

+1

이것은 작동 할 것이지만, 그는 자신의 서비스를 RESTful하게 만드는 것에 관심이 있다고 가정합니다. – jgitter

+1

올바르지 않습니다. '@ RequestParam'을'@ PathParam'과 교환해야합니다 – geoand

+0

@geoand 맞아요, 놓쳤습니다. – jgitter