posted by 생존본능 2015.07.15 19:28
크리에이티브 커먼즈 라이선스
Creative Commons License

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [tc.wo.mbseo.exchangediary.https.datas.TestData] and content type [text/html]

 몇일 동안 고생했던 오류 ㅠ




androidannotations 에서 rest templete 을 사용하는데 계속 이 오류 뜨는 경우.

서버에서 가져오는 값이 text/html 으로 오고 있기때문에 

GsonHttpMessageConverter 으로 변환할수 없기때문에 발생하는 오류입니다.



1. 텍스트에 대한 대응 추가.


이럴때에는 "converters =" 에서 
 
StringHttpMessageConverter.class 를 추가하여 텍스트에 대한 대응을 추가하면

리턴받는 값이 text 값으로 정상적으로 들어오게 됩니다.



2. server 에서 수정 하는 방법

 사실상 서버쪽에서 발생된 오류가 볼수있으며, json 포멧으로 넘기고 타입은 text/html 을 넘기기 때문에

발생된 것이므로 서버쪽에서 header 에서 추가해주면 됩니다.




3. android 쪽에서 수정하는 방법



 RestTemplate getRestTemplate();


 void setRestTemplate(RestTemplate restTemplate);


를 추가하여 template에 접근할수있도록 변경한이후,




GsonHttpMessageConverter 에서 파싱할수있는 타입을 추가해주시면 됩니다.


저작자 표시
신고
posted by 생존본능 2015.05.04 14:49
크리에이티브 커먼즈 라이선스
Creative Commons License


 androidannotations 에서 많이 사용되는것 위주로 정리해 두겠습니다.





 1. @EActivity


 안드로이드에서 가장 많이 사용되는 어노텐션입니다.


 androidannotations 을 사용하는 activity를 명령하는 어노텐션 입니다.


@EActivity

public class MainActivity extends Activity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}


 위와 같이 명명 하시면 됩니다.


 또한 layout과 같이 사용하시려면 


 

@EActivity( R.layout.activity_main )

public class MainActivity extends Activity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}



 내용 처럼 @EActivity( R.layout.activity_main ) 으로 사용 하시면 됩니다.


 이렇게 적용하신 다음에


 mainifests에서 activity 명을 activity_ 으로 수정해주시면 됩니다.




 변경해 주시면 오류가 뜨는데 이때 Build > rebuild project 하시면 오류가 사라집니다.



 rebuild project를 하시면 보이지는 않지만 androidannotations에서 자동으로


 "activity_" 라는 클래스를 생성하기때문에 정상적으로 표시되는 것을 확인하실수있습니다.


 




 2. @AfterViews


@AfterViews는 view에 대한 모든 내용이 완료된 이후에 호출됩니다.



@EActivity( R.layout.activity_main )

public class MainActivity extends ActionBarActivity {



    @AfterViews

    protected void init()

    {

    }

}



 위 처럼 사용하시면 됩니다.


 주의 하실점은 androidannotations에서 MainActivity_라는 클래스를 생성하여


 MainActivity에 접근하기때문에 private를 사용할경우 오류가 발생합니다.


 public 또는 protected 만 사용이 가능합니다.





 3, @ViewById


 @ViewById는 안드로이드에서 사용했던 findViewById의 절차를 간소한 어노텐션입니다.


protected TextView tvMain;


    @Override

    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {

        super.onCreate(savedInstanceState, persistentState);

        tvMain = (TextView) findViewById( R.id.tvMain );

    }



 처럼 사용했던 기존에 방식에서 @ViewById를 사용함으로써 간소화 하는 방식입니다.



 사용법은


     @ViewById

    protected TextView tvMain;


 처럼 사용하시면 됩니다. 위처럼 사용하시면 R.id.tvMain 이란 객체를 찾아 tvMain 변수에 넣어줍니다.



    @ViewById ( R.id.tvMain )

    protected TextView tvMain;



 또한 위처럼도 사용이 가능합니다.




 4. @Click

 

 기존에 사용하던 버튼을 사용하던 방식에서 크게 간소화 되었습니다.


protected TextView tvMain;


    @Override

    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {

        super.onCreate(savedInstanceState, persistentState);

        tvMain = (TextView) findViewById( R.id.tvMain );

        tvMain.setOnClickListener( new View.OnClickListener(){

            @Override

            public void onClick(View v) {

                Log.i(TAG , "tvMainClick");

            }

        });

    }


 

 사용 방식은

 

@Click( R.id.tvMain )

    protected void tvMainClick()

    {

        Log.i(TAG , "tvMainClick");

    }


 입니다. 기존에 사용할때, 아이디 지정및 객체 생성등의 필요없는


 내용이 사라짐으로써 코드량이 확 주는 것을 확인 하실수 있습니다.



저작자 표시
신고

티스토리 툴바