{"id":17569,"date":"2023-10-07T08:34:56","date_gmt":"2023-10-07T07:34:56","guid":{"rendered":"https:\/\/www.baeldung.com\/spring-spy-vs-spybean"},"modified":"2023-10-07T08:34:56","modified_gmt":"2023-10-07T07:34:56","slug":"difference-between-spy-and-spybean","status":"publish","type":"post","link":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/2023\/10\/07\/difference-between-spy-and-spybean\/","title":{"rendered":"Difference Between @Spy and @SpyBean"},"content":{"rendered":"<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" decoding=\"async\" style=\"float: left; margin-right: 5px;\" loading=\"lazy\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-1024x536.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-300x157.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-768x402.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-100x52.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05.png 1200w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-introduction\" data-id=\"introduction\">1. Introduction<\/h2>\n<div class=\"bd-anchor\" id=\"introduction\"><\/div>\n<p>In this tutorial, we aim to address the difference between <em>@Spy<\/em> and <em>@SpyBean<\/em>, explaining their functionalities and providing guidance on when to employ each one.<\/p>\n<h2 id=\"bd-basic-application\" data-id=\"basic-application\">2. Basic Application<\/h2>\n<div class=\"bd-anchor\" id=\"basic-application\"><\/div>\n<p>For this article, we&#8217;ll use a simple order application that includes an order service to create orders and that calls a notification service to notify when processing an order.<\/p>\n<p><em>OrderService<\/em> has a <em>save()<\/em> method that takes in an <em>Order<\/em> object, saves it using <em>OrderRepository,<\/em> and invokes the <em>NotificationService<\/em>:<\/p>\n<pre><code class=\"language-java\">@Service\r\npublic class OrderService {\r\n    public final OrderRepository orderRepository;\r\n    public final NotificationService notificationService;\r\n    public OrderService(OrderRepository orderRepository, NotificationService notificationService) {\r\n        this.orderRepository = orderRepository;\r\n        this.notificationService = notificationService;\r\n    }\r\n    \r\n    public Order save(Order order) {\r\n        order = orderRepository.save(order);\r\n        notificationService.notify(order);\r\n        if(!notificationService.raiseAlert(order)){\r\n           throw new RuntimeException(&quot;Alert not raised&quot;);\r\n        }\r\n        return order;\r\n    }\r\n}<\/code><\/pre>\n<p>For simplicity, let&#8217;s assume that the <em>notify()<\/em> method logs the order. In reality, it can involve more complex actions, such as sending emails or messages to downstream applications via a queue.<\/p>\n<p>Let&#8217;s also assume that every order created must receive an alert by calling an <em>ExternalAlertService<\/em>, which returns true if the alert is successful, and the <em>OrderService<\/em> will fail if it doesn&#8217;t raise the alert:<\/p>\n<pre><code class=\"language-java\">@Component\r\npublic class NotificationService {\r\n    private ExternalAlertService externalAlertService;\r\n    \r\n    public void notify(Order order){\r\n        System.out.println(order);\r\n    }\r\n    public boolean raiseAlert(Order order){\r\n        return externalAlertService.alert(order);\r\n    }\r\n}<\/code><\/pre>\n<p>The <em>save()<\/em> method in <em>OrderRepository<\/em> saves the <em>order <\/em>object in memory using a <em>HashMap<\/em>:<\/p>\n<pre><code class=\"language-java\">public Order save(Order order) {\r\n    UUID orderId = UUID.randomUUID();\r\n    order.setId(orderId);\r\n    orders.put(UUID.randomUUID(), order);\r\n    return order;\r\n}<\/code><\/pre>\n<h2 id=\"bd-spyandspybeanannotations-in-action\" data-id=\"spyandspybeanannotations-in-action\">3. <em>@Spy<\/em>\u00a0and\u00a0<em>@SpyBean<\/em>\u00a0Annotations in Action<\/h2>\n<div class=\"bd-anchor\" id=\"spyandspybeanannotations-in-action\"><\/div>\n<p>Now that we have a basic application in place, let&#8217;s see how to test different aspects of it with <em>@Spy<\/em> and <em>@SpyBean<\/em> annotations.<\/p>\n<h3 id=\"bd-1-mockitos-spy-annotation\" data-id=\"1-mockitos-spy-annotation\">3.1. Mockito&#8217;s <em>@Spy<\/em> Annotation<\/h3>\n<div class=\"bd-anchor\" id=\"1-mockitos-spy-annotation\"><\/div>\n<p><strong>The <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/mockito-annotations\"><em>@Spy<\/em><\/a> annotation, part of the Mockito testing framework, creates a spy (partial mock) of a real object and is commonly used for Unit Testing.<\/strong><\/p>\n<p>A spy allows us to track and optionally stub or verify specific methods of a real object while still executing the real implementation for other methods.<\/p>\n<p>Let&#8217;s understand this by writing a unit test for the <em>OrderService<\/em>\u00a0and annotating the <em>NotificationService<\/em> with <em>@Spy<\/em>:<\/p>\n<pre><code class=\"language-java\">@Spy\r\nOrderRepository orderRepository;\r\n@Spy\r\nNotificationService notificationService;\r\n@InjectMocks\r\nOrderService orderService;\r\n@Test\r\nvoid givenNotificationServiceIsUsingSpy_whenOrderServiceIsCalled_thenNotificationServiceSpyShouldBeInvoked() {\r\n    UUID orderId = UUID.randomUUID();\r\n    Order orderInput = new Order(orderId, &quot;Test&quot;, 1.0, &quot;17 St Andrews Croft, Leeds ,LS17 7TP&quot;);\r\n    doReturn(orderInput).when(orderRepository)\r\n        .save(any());\r\n    doReturn(true).when(notificationService)\r\n        .raiseAlert(any(Order.class));\r\n    Order order = orderService.save(orderInput);\r\n    Assertions.assertNotNull(order);\r\n    Assertions.assertEquals(orderId, order.getId());\r\n    verify(notificationService).notify(any(Order.class));\r\n}<\/code><\/pre>\n<p>In this case, the <em>NotificationService<\/em> acts as a spy object and <strong>invokes the real <em>notify()<\/em> method when no mock is defined<\/strong>. Furthermore, because we define a mock for the <em>raiseAlert()<\/em> method, the <em>NotificationService<\/em> behaves as a partial mock<\/p>\n<h3 id=\"bd-2-spring-boots-spybean-annotation\" data-id=\"2-spring-boots-spybean-annotation\">3.2. Spring Boot&#8217;s <em>@SpyBean<\/em> Annotation<\/h3>\n<div class=\"bd-anchor\" id=\"2-spring-boots-spybean-annotation\"><\/div>\n<p><strong>On the other hand, the <em>@SpyBean<\/em> annotation is specific to Spring Boot and is used for integration testing with Spring&#8217;s dependency injection<\/strong>.<\/p>\n<p>It allows us to create a spy (partial mock) of a Spring bean while still using the actual bean definition from our application context.<\/p>\n<p>Let&#8217;s add an integration test using <em>@SpyBean<\/em> for <em>NotificationService<\/em>:<\/p>\n<pre><code class=\"language-java\">@Autowired\r\nOrderRepository orderRepository;\r\n@SpyBean\r\nNotificationService notificationService;\r\n@SpyBean\r\nOrderService orderService;\r\n@Test\r\nvoid givenNotificationServiceIsUsingSpyBean_whenOrderServiceIsCalled_thenNotificationServiceSpyBeanShouldBeInvoked() {\r\n    Order orderInput = new Order(null, &quot;Test&quot;, 1.0, &quot;17 St Andrews Croft, Leeds ,LS17 7TP&quot;);\r\n    doReturn(true).when(notificationService)\r\n        .raiseAlert(any(Order.class));\r\n    Order order = orderService.save(orderInput);\r\n    Assertions.assertNotNull(order);\r\n    Assertions.assertNotNull(order.getId());\r\n    verify(notificationService).notify(any(Order.class));\r\n}<\/code><\/pre>\n<p>In this case, the Spring application context manages the <em>NotificationService<\/em> and injects it into the <em>OrderService<\/em>. <strong>Invoking\u00a0<em>notify()<\/em>\u00a0within <em>NotificationService<\/em> triggers the execution of the real method, and invoking <em>raiseAlert()\u00a0<\/em>triggers the execution of the mock<\/strong>.<\/p>\n<h3 id=\"bd-differences-between-spy-and-spybean\" data-id=\"differences-between-spy-and-spybean\">4. Differences Between <em>@Spy<\/em> and <em>@SpyBean<\/em><\/h3>\n<div class=\"bd-anchor\" id=\"differences-between-spy-and-spybean\"><\/div>\n<p>Let&#8217;s understand the difference between <em>@Spy<\/em> and <em>@SpyBean\u00a0<\/em>in detail.<\/p>\n<p>In unit testing, we utilize <em>@Spy<\/em>, whereas in integration testing, we employ <em>@SpyBean<\/em>.<\/p>\n<p>If the <em>@Spy<\/em> annotated component contains other dependencies, we can declare them during initialization. If they&#8217;re not provided during initialization, the system will use a zero-argument constructor if available. In the case of the <em>@SpyBean<\/em> test, we must use the <em>@Autowired<\/em> annotation to inject the dependent component. Otherwise, during runtime, Spring Boot creates a new instance.<\/p>\n<p><strong>If we use\u00a0<em>@SpyBean<\/em> in the unit test example, the test will fail with a <a class=\"editor-rtfLink\" href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/21\/docs\/api\/java.base\/java\/lang\/NullPointerException.html\"  rel=\"noopener\"><em>NullPointerException<\/em><\/a><\/strong><span data-preserver-spaces=\"true\">\u00a0when\u00a0<\/span><em><span data-preserver-spaces=\"true\">NotificationService<\/span><\/em><span data-preserver-spaces=\"true\">\u00a0gets invoked because <em>OrderService<\/em> expects a mock\/spy\u00a0<\/span><em><span data-preserver-spaces=\"true\">NotificationService<\/span><\/em>.<\/p>\n<p>Likewise, <strong>if <em>@Spy<\/em> is used in the example of the integration test, the test will fail<\/strong> with the error message &#8216;Wanted but not invoked: <em>notificationService.notify(&lt;any com.baeldung.spytest.Order&gt;<\/em>),&#8217; <strong>because the Spring application context is not aware of the\u00a0<em>@Spy<\/em> annotated class<\/strong>. Instead, it creates a new instance of <em>NotificationService<\/em> and injects it into <em>OrderService.<\/em><\/p>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">5. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this article, we explored <em>@Spy<\/em> and <em>@SpyBean<\/em> annotations and when to use them.<\/p>\n<p>As always, the source code for the examples is available\u00a0<a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/spring-boot-modules\/spring-boot-testing-2\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/798153707\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/798153707\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FSpring-Featured-Image-05-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-spy-vs-spybean#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-spy-vs-spybean\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<h2><b>Commercials Cooperation Advertisements:<\/b><\/h2>\r\n<p><br>(1) IT Teacher IT Freelance<br> <\/p>\r\n<a href=https:\/\/itteacheritfreelance.hk\/wordpress><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITTeacherITFreelance-Website.png alt=IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\/><\/a><p><a href=https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/findteacher>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427! <\/a><br>\r\n\r\n\u7535\u5b50\u8ba1\u7b97\u673a -\u6559\u80b2 -IT \u96fb\u8166\u73ed\u201d ( IT\u96fb\u8166\u88dc\u7fd2 ) \u63d0\u4f9b\u4e00\u500b\u65b9\u4fbf\u7684\u7535\u5b50\u8ba1\u7b97\u673a \u6559\u80b2\u5e73\u53f0, \u70ba\u5927\u5bb6\u914d\u5c0d\u4fe1\u606f\u6280\u672f, \u96fb\u8166 \u8001\u5e2b, IT freelance \u548c programming expert. \u8b93\u5927\u5bb6\u65b9\u4fbf\u5730\u5c31\u80fd\u627e\u5230\u5408\u9069\u7684\u96fb\u8166\u88dc\u7fd2, \u96fb\u8166\u73ed, \u5bb6\u6559, \u79c1\u4eba\u8001\u5e2b.  <br>\r\n\r\nWe are a education and information platform which you can find a IT private tutorial teacher or freelance. <br>\r\n\r\nAlso we provide different information about information technology, Computer, programming, mobile, Android, apple, game, movie, anime, animation\u2026 \r\n<\/p>\n<p><br>(2) ITSec<br> <\/p><a href=https:\/\/itsec.vip><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITSec-Main-Promotion-Image.png alt= https:\/\/itsec.vip\/\r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers.  \r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training.\/><\/a> \r\n<br><br> \r\n<p><a href=https:\/\/itsec.vip>www.ITSec.vip<\/a> <br> <br> \r\n<p><a href=https:\/\/sraa.com.hk>www.Sraa.com.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itsec.hk>www.ITSec.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/penetrationtest.hk>www.Penetrationtest.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itseceu.uk>www.ITSeceu.uk<\/a> <br> <br> \r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers. <br><br>\r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training. \r\n<br><br>Contact us right away. <br><br>Email (Prefer using email to contact us): <br>SalesExecutive@ITSec.vip<\/p>","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Spring-Featured-Image-05-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Learn the difference between @Spy and @SpyBean in Spring.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/798153707\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FSpring-Featured-Image-05-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/798153707\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-spy-vs-spybean#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-spy-vs-spybean\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/div>\n","protected":false},"author":869,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[22],"tags":[61,122,127,129,124,128,125,132,131,133,126,130,123,66,94,88,97,56,64,65,60,112,40,75,95,104,33,120,105,101,98,115,30,29,41,86,70,69,68,72,71,26,118,108,87,46,55,48,52,54,51,50,83,62,58,57,109,35,59,63,85,79,82,96,80,27,81,114,44,42,43,45,38,39,110,117,100,111,116,73,89,90,92,91,93,84,78,37,102,34,36,77,67,74,99,113,7988,119,28,121,32,47,49,53,103,31,76],"class_list":["post-17569","post","type-post","status-publish","format-standard","hentry","category-mobile","tag-airpods","tag-anime","tag-anime-characters","tag-anime-cosplay","tag-anime-edits","tag-anime-merchandise","tag-anime-movies","tag-anime-news","tag-anime-recommendations","tag-anime-reviews","tag-anime-series","tag-anime-streaming","tag-animes","tag-app-store","tag-app-store-samsung","tag-appgallery","tag-appgallery-oneplus","tag-apple","tag-apple-music","tag-apple-tv","tag-apple-watch","tag-bbc-sport","tag-best-mobile-games","tag-bixby","tag-bixby-xiaomi","tag-champions-league","tag-cyberpunk","tag-cyberpunk-2077","tag-fantasy-football","tag-fifa","tag-football","tag-formula-1","tag-fortnite","tag-free-fire","tag-free-mobile-games","tag-freebuds-pro","tag-galaxy-a52","tag-galaxy-note-20","tag-galaxy-s21","tag-galaxy-watch-4","tag-galaxy-z-fold-3","tag-game","tag-games","tag-golf","tag-harmonyos","tag-how-to-backup-iphone","tag-how-to-factory-reset-iphone","tag-how-to-reset-iphone","tag-how-to-restore-iphone","tag-how-to-unlock-iphone","tag-how-to-unlock-iphone-5","tag-how-to-unlock-iphone-6","tag-huawei","tag-ios","tag-ipad","tag-iphone","tag-live-soccer","tag-lol","tag-macbook","tag-macos","tag-mate-40-pro","tag-mi-11-lite","tag-mi-home-security-camera-basic-1080p","tag-mi-home-security-camera-basic-1080p-huawei","tag-mi-smart-band-6","tag-minecraft","tag-miui","tag-mlb-scores","tag-mobile-game-design","tag-mobile-game-development","tag-mobile-game-marketing","tag-mobile-game-monetization","tag-mobile-games","tag-mobile-gaming","tag-nba-scores","tag-nba-standings","tag-nfl","tag-nfl-scores","tag-nhl-scores","tag-one-ui","tag-oneplus","tag-oneplus-9-pro","tag-oneplus-buds-pro","tag-oneplus-nord-ce-5g","tag-oxygenos","tag-p40-pro-plus","tag-poco-x3-pro","tag-pokemon","tag-premier-league","tag-pubg","tag-pubg-mobile","tag-redmi-note-10-pro","tag-samsung","tag-samsung-pay","tag-soccer","tag-sports","tag-spring-annotations","tag-steam","tag-steeam","tag-top-10-anime","tag-valorant","tag-when-do-the-iphone-7-come-out","tag-when-does-the-iphone-7-come-out","tag-when-is-the-iphone-7-coming-out","tag-world-cup","tag-xbox-series-x","tag-xiaomi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/17569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/users\/869"}],"replies":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/comments?post=17569"}],"version-history":[{"count":1,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/17569\/revisions"}],"predecessor-version":[{"id":17572,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/17569\/revisions\/17572"}],"wp:attachment":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/media?parent=17569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/categories?post=17569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/tags?post=17569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}