스프링에서 rest api call 하기 / spring 에서 rest call / spring 에서 http request
RestTemplate
Spring framework 에서 Rest API 호출을 위해 RestTemplate 이라는 것을 제공한다. ref. 2, ref. 3 에서 간단한 예제를 확인할 수 있다.
postForObject
Server 에서 RESTful API server 에 request 를 POST 방식으로 form 의 data 는 json 형식으로 보낼 때 방법. ElasticSearch 등을 사용할 때 활용할 수 있다. 혹시나 해서 적어놓는데, ElasticSearch 는 Java API 를 따로 제공한다.(참고)
.thumb {
display: block;
overflow: hidden;
height:200px;
width:200px;}.thumb img {
display: block;/* Otherwise it keeps some space around baseline */
min-width:100%;/* Scale up to fill container width */
min-height:100%;/* Scale up to fill container height */-ms-interpolation-mode: bicubic;/* Scaled images look a bit better in IE now */}
1. Html은 <ima>를 <div>로 감싼다.
2. Css에는 지정 할 정사각형의 크기를 <div>의 속성에 정의를 하고, 이미지에 min-width: 100%; min-height: 100%; 를 정의하면 끝!!
Note that the shared element transitions require Android 5.0 (API level 21) and above and will be ignored for any lower API versions. Be sure to check the version at runtime before using API 21 specific features.
1. Enable Window Content Transitions
Enable Window Content Transitions in your styles.xml file:
<!-- Base application theme. -->
<stylename="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<itemname="android:windowContentTransitions">true</item>
...
</style>
2. Assign a Common Transition Name
Assign a common transition name to the shared elements in both layouts. Use theandroid:transitionName attribute.
Note that it doesn't matter if the android:id is different or where in the layout hierarchy the source and target views exist.
3. Start Activity
Start the target activity by specifying a bundle of those shared elements and views from the source.
Intent intent =newIntent(this, DetailsActivity.class);
// Pass data object in the bundle and populate details activity.
intent.putExtra(DetailsActivity.EXTRA_CONTACT, contact);
ActivityOptionsCompat options =ActivityOptionsCompat.
makeSceneTransitionAnimation(this, (View)ivProfile, "profile");
startActivity(intent, options.toBundle());
Thats it! Specifying the source view along with the transition name ensures that even if you have multiple views with the same transition name in the source hierarchy, it will essentially be able to pick the right view to start the animation from.
To reverse the scene transition animation when you finish the second activity, call theActivity.supportFinishAfterTransition() method instead of Activity.finish(). Also, you will need to override the behavior of the home button in the ToolBar/ ActionBar for such cases:
@Overridepublicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home buttoncaseandroid.R.id.home:
supportFinishAfterTransition();
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
4. Multiple Shared Elements
Sometimes, you might want to animate multiple elements from the source view hierarchy. This can be achieved by using distinct transition names in the source and target layout xml files.
Note: By default android.util.Pair will be imported but we want to select theandroid.support.v4.util.Pair class instead.
Be careful to not overdo transitions between shared elements. While it can make sense to have one cohesive unit animate from one screen to another (which may or may not contain multiple shared elements), having too many shared elements will result in a distracting animation which makes the experience more jarring.
5. Customizing Shared Elements Transition
In Android L, shared elements transition defaults to a combination of ChangeBounds,ChangeTransform, ChangeImageTransform, and ChangeClipBounds. This works well for most typical cases. However, you may customize this behavior or even define your own custom transition.
<!-- Base application theme. -->
<stylename="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar">
<!-- enable window content transitions -->
<itemname="android:windowContentTransitions">true</item>
<!-- specify enter and exit transitions --><!-- options are: explode, slide, fade -->
<itemname="android:windowEnterTransition">@transition/change_image_transform</item>
<itemname="android:windowExitTransition">@transition/change_image_transform</item>
<!-- specify shared element transitions -->
<itemname="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<itemname="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
The change_image_transform transition in this example is defined as follows:
To enable window content transitions at runtime instead, call the Window.requestFeature()method:
// inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// set an enter transition
getWindow().setEnterTransition(newExplode());
// set an exit transition
getWindow().setExitTransition(newExplode());
Leveraging shared element transitions works with fragments too in a similar way as was shown above for activities.
Note that the shared element transitions require Android 5.0 (API level 21) and above and will be ignored for any lower API versions. Be sure to check the version at runtime before using API 21 specific features.
Assign a Common Transition Name
Within two fragments let's assign a common transition name to the shared elements in both layouts. Use the android:transitionName attribute and put the view inside bothFirstFragment and SecondFragment:
Now within the activity, we can trigger the transition as part of any FragmentTransaction:
// Get access to or create instances to each fragmentFirstFragment fragmentOne =...;
SecondFragment fragmentTwo =...;
// Check that the device is running lollipopif (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) {
// Inflate transitions to applyTransition changeTransform =TransitionInflater.from(this).
inflateTransition(R.transition.change_image_transform);
Transition explodeTransform =TransitionInflater.from(this).
inflateTransition(android.R.transition.explode);
// Setup exit transition on first fragment
fragmentOne.setSharedElementReturnTransition(changeTransform);
fragmentOne.setExitTransition(explodeTransform);
// Setup enter transition on second fragment
fragmentTwo.setSharedElementEnterTransition(changeTransform);
fragmentTwo.setEnterTransition(explodeTransform);
// Find the shared element (in Fragment A)ImageView ivProfile = (ImageView) findViewById(R.id.ivProfile);
// Add second fragment by replacing first FragmentTransaction ft = getFragmentManager().beginTransaction()
.replace(R.id.container, fragmentTwo)
.addToBackStack("transaction")
.addSharedElement(ivProfile, "profile");
// Apply the transaction
ft.commit();
}
else {
// Code to run on older devices
}
Note that we need use methods on the exiting fragment such assetSharedElementReturnTransition and setExitTransition. On the entering fragment, we call setSharedElementEnterTransition and setEnterTransition. Finally we need to find the instance of the shared element and then call addSharedElement(view, transitionName) as part of building the FragmentTransaction. Additional external resources for fragment-to-fragment shared element transitions include: