2017-09-14 11 views
1

현재 내 작업은 OSGI Enroute (http://enroute.osgi.org/)와 Angular (번들 AngularJS 대신 Angular2/4를 사용하도록 선택했지만)를 사용하여 응용 프로그램을 작성하는 것입니다.OSGI Enroute DTO의 문자열이 '압축'되었습니다.

지금까지 그렇게 좋았습니다. Angular 프런트 엔드의 다양한 요청에 응답하는 REST Java 응용 프로그램이 있지만 현재 문제가 있습니다. 개발을 쉽게하기 위해 포트 4200에서 Angular 코드를 제공하고 백엔드는 포트 8080에서 수신 대기합니다. CORS가 작동하여 코드를 작성하는 동안 요청을 보내고받을 수 있습니다. 이것은 문제와 관련이있을 수도 있고 아닐 수도 있습니다.

21 문자 값이 점점 초과 String 내용으로 DTO로 응답 할 때이 문제 '압축.' 내가받은 값 (UUID)을 후속 GET 요청의 키로 사용하려고 시도했을 때이를 알았습니다. DTO 클래스를 확인했습니다. toString() 메서드는 실제로 메서드를 호출합니다.이 메서드는 21 자보다 긴 문자열을 취하여 this nine...last nine과 비슷한 것을 반환하므로 UUID을 다시 얻는 데 어려움이 있습니다. {"uuid":"95b90155-...ee5c02200", "name":"My Object"} ...

그래서 ... 주어진이 같은이 같은

import org.osgi.dto.DTO; 

public final class MyDTO extends DTO 
{ 
    public String uuid; 
    public String name; 
} 

과 REST 응용 프로그램 :

@RequireBootstrapWebResource(resource="css/bootstrap.css") 
@RequireWebserverExtender 
@RequireConfigurerExtender 
@Component(name="web", propery={"debug=true"}) 
public final class MyApplication implements REST 
{ 
    private boolean debug = false; 

    public MyDTO getMe(RESTRequest request) 
    { 
     MyDTO dto = new MyDTO(); 
     dto.name = "My Object"; 
     dto.uuid = UUID.randomUUID().toString(); 
     return dto; 
    } 

    @SuppressWarnings("unused") 
    @Activate 
    void activate(ComponentContext component, BundleContext bundle, 
       Map<String, Object> config) 
    { 
     if ("true".equals(config.get("debug")) 
     { 
     debug = true; 
     } 
    } 
} 

내 JSON 응답에서이 값 '압축'을 피하기 위해 무엇이 누락 되었습니까?

것들 내가 DTO에서 제공하는 toString() 메서드를 재정의

  • (작동 한)을 시도했습니다. 이것은 효과가 있지만 최상의 솔루션 인 것처럼 보이지는 않습니다. 그런 다음 문자열이 21자를 초과 할 수있는 모든 항목에 대해 toString()을 무시해야합니다. 설명서에 디버깅 용 인 텐트가 있음을 나타내므로 적절한 유형을 반환하지 않을 가능성이 있습니다. 설정
  • request_response()콘텐츠 형식application/json에 : 나는 크롬 웹 콘솔에서 볼 수있는 결과는 아직 내가 DTO.toString 방법을 쓴 압축 된 문자열

답변

1

입니다. 출력 형식이 지정되지 않았고 직렬화가 아닌 디버깅 도구로 사용되는 것이 분명하게 문서화되어 있습니다. 이것이 impl이 문자열을 "압축하는"이유입니다.

DTO를 직렬화해야하는 경우 해당 용도로 코드를 사용해야합니다. DTO를 JSON과 같은 형식으로 변환 할 수있는 API는 https://github.com/osgi/osgi.enroute/blob/master/osgi.enroute.base.api/src/osgi/enroute/dto/api/DTOs.java을 참조하십시오.

+0

아마도 나는 몇 가지 예제를 오해했을 것입니다 ... 그렇다면 메소드는 DTO를 직접 리턴하는 대신 DTOs 메소드를 호출하여 리턴하는'String'을 리턴해야한다는 의도입니까? – Jaedabee

+0

DTO 객체는 형식이 유용하기 때문에 DTO 객체를 직렬화/비 직렬화해야하는 경우이를 수행하는 코드를 원하는 형식으로 사용해야합니다. 예를 들어, JSON, XML, YAML, ... DTOs 클래스는 DTO 객체의 직렬화 및 비 직렬화를위한 메소드가있는 API입니다. –