2013-02-20 3 views
2

자바에서 RESTful 웹 서비스를 위해 Jersey를 사용하고 있습니다. PHP 클라이언트에서 사용하고 있습니다. 나는 다음과 같이이 JSON과 잘 작동이 있습니다JSON JAX-RS in Java

PHP : (사용 httpful의 Phar)

$uri="http://localhost:8080/YYYYY/rest/common/json"; 
    $r = \Httpful\Request::post($uri) 
    ->body({"name":"MyName"})->send(); 
    return $r; 

자바 편안하고 WS :

@POST 
@Path(value="json") 
@Produces(MediaType.TEXT_HTML) 
@Consumes(MediaType.APPLICATION_JSON) 
public String jsonTest(final JaxData data) 
{ 
    System.out.println(data.toString()); 
    return "this is the name: "+data.name; 
} 

자바 바인딩 클래스 :

@XmlRootElement 
public class JaxData { 
    @XmlElement public String name; 
} 

이제는 다음 JSON 구조를 보내려합니다.

{ 
"title":"MyTitle", 
"names":[ 
    { 
     "name":"nameOne" 
    }, 
    { 
     "name":"nameTwo" 
    } 
], 
"city":"MyCity", 
"country": "MyCountry" 
    } 

그래서 원시 유형의 Java와는 달리 객체 내부에 객체를 보내려합니다. Java 측에서이 작업을 수행하려면 어떻게해야합니까? 고맙습니다!

답변

2

보내려는 데이터를 나타내는 개체를 정의하십시오. 객체를 임의로 깊게 만들 수 있습니다 (JSON의 각 레벨을 하위 객체에 매핑 할 수 있음).

은 여기까지 예입니다 당신은 시작 :

public class MyBean implements Serializable { 
    private String title; 
    private List<JaxData> names; 
    private String city; 
    private String country; 

    // Constructors, getters/setters 
} 

@POST 
@Path(value="json") 
@Produces(MediaType.TEXT_HTML) 
@Consumes(MediaType.APPLICATION_JSON) 
public String jsonTest(final MyBean data) { 
    return data.toString(); 
} 
+0

안녕! 대답을위한 thx, 당신은 내가 틀렸어, 내가 lvl과 바인딩 해야하는 것은 개체 내가 인스턴트 메시지를 생산하지 않습니다. 그래서 당신의 예제에서 함수의 매개 변수는 MyBean 객체가 될 것입니다. – Alejandro

+0

아, 잡았다. 좋아, 나는 내 대답을 약간 변경했다. – Perception

+0

귀찮게해서 죄송합니다. : /하지만 어떻게 생성자를 구현합니까? 고맙습니다. – Alejandro