Java를 사용하는 웹 서비스를 통해 데이터를 JSON 형식으로 노출하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/57689

  •  09-06-2019
  •  | 
  •  

문제

Java를 사용하여 JSON의 웹 서비스 클라이언트에 데이터를 반환하는 쉬운 방법이 있습니까?나는 서블릿, 스프링 등에 괜찮습니다.

도움이 되었습니까?

해결책

나에게, 최고의 Java <-> JSON 파서는 XStream입니다. (예, 저는 실제로 xml이 아니라 json에 대해 이야기하고 있습니다.)XStream은 이미 순환 종속성을 처리하고 드라이버, 변환기 등을 작성할 수 있는 간단하고 강력한 API를 갖추고 있습니다.

친절한 감사

다른 팁

조사해 볼 가치가 있을 수도 있습니다 저지.Jersey를 사용하면 안정적인 웹 서비스를 xml 및/또는 JSON으로 쉽게 노출할 수 있습니다.

예를 들어 ...간단한 수업으로 시작해 보세요

@XmlType(name = "", propOrder = { "id", "text" })
@XmlRootElement(name = "blah")
public class Blah implements Serializable {
    private Integer id;
    private String text;

    public Blah(Integer id, String text) {
        this.id = id;
        this.text = text;
    }    

    @XmlElement
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @XmlElement
    public String getText() { return text; }
    public void setText(String value) { this.text = value; }
}

그런 다음 리소스를 생성합니다.

@Path("/blah")
public class BlahResource {
    private Set<Blah> blahs = new HashSet<Blah>();

    @Context
    private UriInfo context;

    public BlahResource() {
        blahs.add(new Blah(1, "blah the first"));
        blahs.add(new Blah(2, "blah the second"));
    }

    @GET
    @Path("/{id}")
    @ProduceMime({"application/json", "application/xml"})
    public Blah getBlah(@PathParam("id") Integer id) {
        for (Blah blah : blahs) {
            if (blah.getId().equals(id)) {
                return blah;
            }
        }
        throw new NotFoundException("not found");
    }
}

그리고 그것을 노출시키세요.Jersey의 ServletContainer를 사용하는 등 여러 가지 방법으로 이를 수행할 수 있습니다.(웹.xml)

<servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

그게 당신이해야 할 전부입니다 ...브라우저를 열고 다음을 찾아보세요. http://localhost/blah/1.기본적으로 XML 출력이 표시됩니다.FireFox를 사용하는 경우 TamperData를 설치하고 accept 헤더 application/json JSON 출력을 보려면

물론 그 외에도 더 많은 내용이 있지만 저지 그 모든 일을 아주 쉽게 만들어줍니다.

행운을 빌어요!

우리는 Java 개체를 JSON으로 변환하기 위해 Flexjson을 사용해 왔으며 사용하기가 매우 쉽다는 것을 알았습니다.http://flexjson.sourceforge.net

여기 몇 가지 예가 있어요.

public String searchCars() {
  List<Car> cars = carsService.getCars(manufacturerId);
  return new JSONSerializer().serialize(cars);
}

전체 그래프를 보내는 deepSerialize와 같은 몇 가지 멋진 기능이 있으며 양방향 관계가 중단되지 않습니다.

new JSONSerializer().deepSerialize(user); 

서버 측에서 날짜 형식을 지정하는 것도 종종 편리합니다.

new JSONSerializer().transform(
  new DateTransformer("dd/MM/yyyy"),"startDate","endDate"
).serialize(contract);

http://www.json.org/java/index.html 필요한 것이 있습니다.

예!확인해 보세요 json-lib

여기에는 내 코드의 단순화된 코드 조각 내 도메인 개체 집합을 보냅니다.

private String getJsonDocumenent(Object myObj) (
    String result = "oops";
    try {
        JSONArray jsonArray = JSONArray.fromObject(myObj);

        result = jsonArray.toString(2);  //indent = 2

    } catch (net.sf.json.JSONException je) {

        throw je;
    }
    return result;
}

나는 google-gson이 매력적이라는 것을 알았습니다.JSON으로 변환한 후 다시 JSON으로 변환합니다. http://code.google.com/p/google-gson/ 매우 유연하며 객체의 복잡성을 간단한 방식으로 처리할 수 있습니다.나는 제네릭에 대한 지원을 좋아합니다.

/*
* we're looking for results in the form
* {"id":123,"name":thename},{"id":456,"name":theOtherName},...
*
* TypeToken is Gson--allows us to tell Gson the data we're dealing with
* for easier serialization.
*/
Type mapType = new TypeToken<List<Map<String, String>>>(){}.getType();

List<Map<String, String>> resultList = new LinkedList<Map<String, String>>();

for (Map.Entry<String, String> pair : sortedMap.entrySet()) {
    Map<String, String> idNameMap = new HashMap<String, String>();
    idNameMap.put("id", pair.getKey());
    idNameMap.put("name", pair.getValue());
    resultList.add(idNameMap);
}

return (new Gson()).toJson(resultList, mapType);

Java의 RESTful 웹 서비스에 대해서는 다음도 확인하세요. 레슬렛 API 이는 REST 웹 서비스(컨테이너 또는 독립 실행형의 서버와 클라이언트 모두)에 대한 매우 강력하고 유연한 추상화를 제공하며 Spring 및 JSON과도 잘 통합됩니다.

이미 언급했듯이, 저지 (JAX-RS impl)은 사용할 프레임워크입니다.하지만 Java 객체와 JSON 간 기본 매핑의 경우 지도 시간 좋다.많은 대안과 달리 이상한 XML 호환성 규칙을 사용하지 않고 객체에 직접 매핑되는 깔끔한 JSON을 읽고 씁니다.또한 null(누락된 항목과 null이 있는 항목 사이에 차이가 있음), 빈 목록 또는 문자열(둘 다 null과 다름)에도 문제가 없습니다.

Jackson은 JAX-RS 공급자 jar를 사용하거나 수동으로 Jersey와도 잘 작동합니다.마찬가지로 평범한 오래된 서블릿과 함께 사용하는 것도 아주 쉽습니다.입력/출력 스트림을 얻고 ObjectMapper.readValue() 및 .writeValue()를 호출하면 됩니다.

저는 JSON 형식의 웹 서비스를 제공하기 위해 jaxws-json을 사용해 왔습니다.프로젝트를 확인할 수 있습니다 https://jax-ws-commons.dev.java.net/json/.

그것은 좋은 프로젝트입니다. 한번 실행해보면 그것이 얼마나 매력적인지 알게 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top