GWT와 연동되는 Json <-> Java 시리얼화
GWT에서 동작할 수 있는 Java용 심플한 Json(de) 시리얼라이저를 찾고 있습니다.조금 검색해보니 모든 멤버에 주석을 달거나 쓸모없는 인터페이스를 정의해야 하는 솔루션이 몇 가지 있었습니다.꽤 지루하다.우리 정말 간단한 거 어때?
class MyBean {
...
}
new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)
GWT의 Overlay Type(Overlay Types).이것이 GWT에서 JSON과 함께 일하는 가장 쉬운 방법이라고 생각합니다.다음은 링크된 문서에서 수정된 코드 예입니다.
public class Customer extends JavaScriptObject {
public final native String getFirstName() /*-{
return this.first_name;
}-*/;
public final native void setFirstName(String value) /*-{
this.first_name = value;
}-*/;
public final native String getLastName() /*-{
return this.last_name;
}-*/;
public final native void setLastName(String value) /*-{
this.last_name = value;
}-*/;
}
오버레이 유형을 정의하면 JSON에서 JavaScript 개체를 쉽게 만들고 Java에서 해당 속성에 액세스할 수 있습니다.
public static final native Customer buildCustomer(String json) /*-{
return eval('(' + json + ')');
}-*/;
개체의 JSON 표현을 다시 원할 경우 오버레이 유형을 JSONObject로 래핑할 수 있습니다.
Customer customer = buildCustomer("{'Bart', 'Simpson'}");
customer.setFirstName("Lisa");
// Displays {"first_name":"Lisa","last_name":"Simpson"}
Window.alert(new JSONObject(customer).toString());
GWT 2.1에서 도입된 새로운 AutoBean 프레임워크도 시도해 볼 수 있습니다.
콩의 인터페이스와 그 인터페이스를 벤더하는 팩토리를 정의하면 GWT가 실장을 생성합니다.
interface MyBean {
String getFoo();
void setFoo(String foo);
}
interface MyBiggerBean {
List<MyBean> getBeans();
void setBeans(List<MyBean> beans>;
}
interface Beanery extends AutoBeanFactory{
AutoBean<MyBean> makeBean();
AutoBean<MyBiggerBean> makeBigBean();
}
Beanery beanFactory = GWT.create(Beanery.class);
void go() {
MyBean bean = beanFactory.makeBean().as();
bean.setFoo("Hello, beans");
}
AutoBeanCodex를 사용하여 json과 시리얼화할 수 있습니다.
AutoBean<MyBean> autoBean = AutoBeanUtils.getAutoBean(bean);
String asJson = AutoBeanCodex.encode(autoBean).getPayload();
AutoBean<MyBean> autoBeanCloneAB =
AutoBeanCodex.decode(beanFactory, MyBean.class, asJson );
MyBean autoBeanClone = autoBeanCloneAB.as();
assertTrue(AutoBeanUtils.deepEquals(autoBean, autoBeanClone));
합니다.「 」를 사용합니다.용하하AutoBeanFactoryMagic.create(Beanery.class)
GWT.create(Beanery.class)
.
가장 간단한 방법은 GWT의 내장 JSON API를 사용하는 것입니다.여기 서류입니다.사용 방법에 대한 훌륭한 튜토리얼을 소개합니다.
간단한 것은 다음과 같습니다.
String json = //json string
JSONValue value = JSONParser.parse(json);
JSONValue API는 꽤 멋집니다.JSON 개체에서 값을 추출할 때 유효성 검사를 연쇄할 수 있으므로 형식이 잘못된 경우 예외가 발생합니다.
내 질문에 대한 정답을 찾은 것 같다.
GWT에서 bean-to-json 및 json-to-bean 변환은 간단한 작업이 아니라는 것을 알게 되었습니다.GWT는 완전한 소스 코드를 필요로 하고 이 소스 코드는 GWT에 의해 에뮬레이션된 Java 클래스만 사용해야 하므로 알려진 라이브러리는 작동하지 않습니다.또한 GWT에서는 반사를 사용할 수 없습니다.매우 까다로운 요구 사항!
나는 gwt-jsonizer라는 현존하는 유일한 해결책을 찾았다.커스텀 제너레이터 클래스를 사용하여 각 "jsonable" 빈에 위성 인터페이스가 필요합니다.유감스럽게도 최신 버전의 GWT에서 패치를 적용하지 않으면 동작하지 않으며 오랫동안 업데이트되지 않았습니다.
그래서 저는 개인적으로 제 콩을 json으로 변환하는 방법을 만드는 것이 더 싸고 빠르다고 판단했습니다.다음과 같이 합니다.
public class SmartBean {
private String name;
public String getName() { return name; }
public void setName(String value) { name = value; }
public JSONObject toJson() {
JSONObject result = new JSONObject();
result.put("name", new JSONString(this.name));
return result;
}
public void fromJson(JSONObject value) {
this.name = value.get("name").isString().stringValue();
}
}
JSONxxxx
GWT를 사용합니다.
RestyGWT는 Java Object를 GWT의 JSON으로 인코딩 또는 디코딩하기 위한 강력한 라이브러리입니다.
import javax.ws.rs.POST;
...
public interface PizzaOrderCodec extends JsonEncoderDecoder<PizzaOrder> {
}
그 후, 다음과 같이 입력합니다.
// GWT will implement the interface for you
PizzaOrderCodec codec = GWT.create(PizzaOrderCodec.class);
// Encoding an object to json
PizzaOrder order = ...
JSONValue json = codec.encode(order);
// decoding an object to from json
PizzaOrder other = codec.decode(json);
또한 Restful 웹 서비스를 사용하기 위한 몇 가지 사용하기 쉬운 API를 가지고 있습니다.
즐거운시간보내세요.
체크해 주세요.
GWT Professional JSON 시리얼라이저 : http://code.google.com/p/gwtprojsonserializer/
!GWT 2.0+와 연동!
요즘 GWT에는 json.org/java이 포함되어 있는 것 같습니다.
gwt-servlet-deps.jar\cisco\json\
또는 이 프로젝트는 포괄적인 것 같습니다.http://code.google.com/p/piriti/
Google Web Toolkit Applications(Page 510 ~ 522)에서 저자 Ryan Dewsbury는 GWT 코드 생성을 사용하여 XML 및 JSON 문서 간에 직렬화를 수행하는 방법을 보여 줍니다.
여기서 코드를 다운로드할 수 있습니다.10장 코드번들을 참조하고 src/com/gwtapps/serialization 패키지를 참조합니다.이 코드에 대한 라이선스는 보지 못했지만 작성자에게 이메일을 보내 뭐라고 하는지 확인했습니다.그가 답장하면 업데이트 하겠습니다.
이 솔루션의 문제:
- 시리얼화할 모든 오브젝트에 마커인터페이스를 추가해야 합니다(java.io 사용).시리얼이 가능하지만 다른 것도 사용할 수 있을 것 같습니다.백엔드에 휴지 상태를 사용하고 있다면 pojo는 이미 이렇게 태그가 붙어 있을 수 있습니다.)
- 이 코드는 문자열 속성만 지원하므로 확장할 수 있습니다.
- 코드는 1.4와 1.5에만 기재되어 있습니다.
즉, 이는 기본 솔루션이 아니라 GWT에 적합한 JSON 시리얼라이저를 구축하기 위한 훌륭한 출발점입니다.이것을 서버측의 JSON 시리얼라이저(json-lib등)와 조합하면, 곧바로 사용할 수 있습니다.
이 프로젝트도 찾았습니다(마커 인터페이스가 필요합니다).
Google 코드 http://code.google.com/p/json-io/에서 이 시리얼라이저를 사용해 보십시오.
Java에서 JSON 형식을 쓰거나 읽어야 할 경우 이 도구를 사용합니다.추가 클래스 작성 등이 필요 없습니다.Java 오브젝트 그래프를 1회의 호출로 JSON 형식으로 변환합니다.반대로 JSON String 또는 Stream to Java 객체를 만듭니다.이 도서관은 내가 본 것 중 가장 빠른 도서관이다.대부분의 경우 이진 형식을 사용하는 ObjectOutputStream 및 ObjectInputStream보다 빠릅니다.
매우 편리한 유틸리티.
https://gerrit.googlesource.com/gwtjsonrpc/ 에서 이 프로젝트를 체크할 수 있습니다.
이것은 Android Gerrit의 코드 리뷰 시스템을 지원하기 위해 만들어진 라이브러리이지만, Gerrit뿐만 아니라 모든 GWT 프로젝트에 포함되도록 설계된 독립형 모듈입니다.
적절한 튜토리얼은 디렉토리의 최상위 레벨에 있는 README일 것입니다.표준 GWT RPC와 매우 유사하지만 JSON 인코딩을 사용합니다.XSRF 보호 기능도 내장되어 있습니다.
제가 이 질문에 많이 대답하는 것 같아요.
code.google.com에는 Using GWT for JSON Mashups라는 제목의 페이지가 있습니다.저는 GWT에 대해 잘 모르기 때문에 (불행하게도) 제 능력 밖이라 도움이 되지 않을 수도 있습니다.
좋아, 네가 원하지 않는 답변으로 판명나서 내가 전에 했던 답변은 삭제했어.
GWT에서 얼마나 잘 동작하는지는 모르겠지만, Json-lib 라이브러리를 사용하여 제가 일하는 일반 Java 프로젝트에서 개체를 직렬화합니다.
JavaBean에서 직접 JSONObject를 작성한 후 결과 JSONObject의 toString() 메서드를 사용하여 실제 JSON 문자열을 가져올 수 있습니다.
마찬가지로 JSON을 JavaBean으로 되돌릴 수도 있습니다.
잭슨이 당신 밑에서 일할지 모르겠네요.당신이 찾고 있는 GWT 고유의 것이 있는지 모르겠습니다.그렇지 않다면 효과가 있을 것입니다.
그러나 직렬화/비직렬화는 다음과 같이 매우 잘 작동합니다.
// read json, create object
ObjectMapper mapper = new ObjectMapper();
MyBean bean = mapper.readValue(jsonAsString, MyBean.class);
// and write out
StringWriter sw = new StringWriter();
mapper.writeValue(sw, user);
String jsonOut = sw.toString();
액세스 장치가 필요합니다(getX()
시리얼화하려면 ,setX()
다른 이름으로 메서드에 주석을 달 수 있습니다.) 하지만 그게 다예요.
언급URL : https://stackoverflow.com/questions/683123/json-java-serialization-that-works-with-gwt
'programing' 카테고리의 다른 글
Word press - 라디오 버튼 체크아웃 woocommerce 표시/숨기기 필수 필드 (0) | 2023.02.21 |
---|---|
이전 React 버전에서 create-react-app을 사용하는 방법 (0) | 2023.02.21 |
JSON 문자 인코딩 - 브라우저에서 UTF-8이 잘 지원됩니까?아니면 숫자 이스케이프 시퀀스를 사용해야 합니까? (0) | 2023.02.21 |
소켓IO ERR_CONNECTION_REFUSED (0) | 2023.02.21 |
창이 있는 브라우저 jquery ajax 이력을 교차합니다.history.pushState 및 폴백 (0) | 2023.02.21 |