Java를 사용하는 웹 서비스를 통해 데이터를 JSON 형식으로 노출하려면 어떻게 해야 합니까?
-
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/.
그것은 좋은 프로젝트입니다. 한번 실행해보면 그것이 얼마나 매력적인지 알게 될 것입니다.