2017-03-20 11 views
18

सप्ताह के जोड़ों में स्प्रिंग तो मैं सीखने किया गया है का उपयोग कर शोकहारा एपीआई, इस ट्यूटोरियल जब तक मैं एकीकृत करने के लिए MongoDB करने की कोशिश की'फ़ील्ड को उस प्रकार का बीन चाहिए जो पाया नहीं जा सका।' त्रुटि वसंत MongoDB

Building a RESTful Web Service

सब कुछ ठीक था निम्नलिखित किया गया। तो मैं इस ट्यूटोरियल का पालन करता हूं।

Accessing Data with MongoDB

लेकिन मेरे अभ्यास आंशिक रूप से अभी भी पहले से एक का उपयोग कर रहा है। तो मेरी परियोजना निर्देशिका संरचना इस तरह है।

src/ 
├── main/ 
│ └── java/ 
|  ├── model/ 
|  | └── User.java 
|  ├── rest/ 
|  | ├── Application.java 
|  | ├── IndexController.java 
|  | └── UsersController.java 
|  └── service/ 
|   └── UserService.java 
└── resources/ 
    └── application.properties 

यह मेरा मॉडल/User.java फ़ाइल

package main.java.model; 

import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.mapping.Document; 

@Document(collection="user") 
public class User { 

    private int age; 
    private String country; 
    @Id 
    private String id; 
    private String name; 


    public User() { 
     super(); 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getCountry() { 
     return country; 
    } 

    public void setCountry(String country) { 
     this.country = country; 
    } 
} 

यह मेरा आराम/UsersController.java फ़ाइल

package main.java.rest; 

import java.util.List; 
import main.java.service.UserService; 
import main.java.model.User; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
@RequestMapping(value = "/users") 
public class UsersController { 

    @Autowired 
    UserService userService; 

    @RequestMapping(method = RequestMethod.GET) 
    public List<User> getAllUsers() { 
     return userService.findAll(); 
    } 
} 

यह मेरा सेवा/UserService है .java फ़ाइल

package main.java.service; 

import java.util.List; 
import main.java.model.User; 
import org.springframework.data.mongodb.repository.MongoRepository; 

public interface UserService extends MongoRepository<User, String> { 
    public List<User> findAll(); 
} 

मैं उन्हें संकलित कर सकता हूं (मैं संकलन के लिए ग्रेडल का उपयोग कर रहा हूं क्योंकि मैं ट्यूटोरियल का अनुसरण कर रहा हूं), लेकिन जब मैं जार फ़ाइल चलाता हूं तो यह त्रुटि फेंक रहा था।


APPLICATION FAILED TO START


Description:

Field userService in main.java.rest.UsersController required a bean of type 'main.java.service.UserService' that could not be found.

Action:

Consider defining a bean of type 'main.java.service.UserService' in your configuration.

सुनिश्चित नहीं हैं कि क्या गलत है मैं आसपास googling शुरू किया और पाया कि मैं Beans.xml फ़ाइल को शामिल और उस में userService रजिस्टर करने के लिए की जरूरत है। मैंने ऐसा किया लेकिन यह काम नहीं कर रहा है। मैं वास्तव में इसके लिए नया हूं इसलिए मुझे वास्तव में कोई संकेत नहीं है कि क्या हो रहा है।

+0

यहां एक ही समस्या है, हल किया गया है? – GuoJing

+0

हल किया गया यह एक उत्तर पोस्ट करेगा :) @GuoJing –

उत्तर

31

इसे हल किया गया। तो डिफ़ॉल्ट रूप से, @SpringBootApplication घोषणा के तहत आने वाले सभी पैकेज स्कैन किए जाएंगे।

मानते हुए अपने मुख्य वर्ग ExampleApplication@SpringBootApplication घोषणा है कि com.example.something अंदर घोषित किया जाता है, तो सभी घटक है कि com.example.something के अंतर्गत आता है, जबकि com.example.applicant स्कैन नहीं किए जाएंगे स्कैन किया जाता है।

तो, question के आधार पर ऐसा करने के दो तरीके हैं।

@SpringBootApplication(scanBasePackages={ 
"com.example.something", "com.example.application"}) 

इस तरह, एप्लिकेशन सभी निर्दिष्ट घटकों को स्कैन करेगा, लेकिन मुझे लगता है कि यदि स्केल बड़ा हो रहा था तो क्या होगा?

तो मैं अपने पैकेज को पुनर्गठन करके दूसरे दृष्टिकोण का उपयोग करता हूं और यह काम करता है! अब मेरी पैकेज संरचना इस तरह बन गई।

src/ 
├── main/ 
│ └── java/ 
|  ├── com.example/ 
|  | └── Application.java 
|  ├── com.example.model/ 
|  | └── User.java 
|  ├── com.example.controller/ 
|  | ├── IndexController.java 
|  | └── UsersController.java 
|  └── com.example.service/ 
|   └── UserService.java 
└── resources/ 
    └── application.properties 
+0

क्या आप मुझे कोड दिखा सकते हैं? मैंने वैसे ही किया लेकिन अभी भी अपवाद। :( – GuoJing

+0

वास्तव में कुछ भी नहीं बदला गया, मैंने अभी कुछ पैकेजों का नाम बदल दिया है और कक्षाएं @ गुओजिंग –

+0

धन्यवाद। मैं इसे आजमाउंगा। – GuoJing

16

सेवा/UserService.java में @Service जोड़ें।

0

ऑटो-आयात की वजह से बहुत समय बिताया। इंटेलिज आइडिया somewhy import org.jvnet.hk2.annotations.Service; से import org.springframework.stereotype.Service; के बजाय आयात किया गया!

+0

क्या आप अपना उत्तर अपडेट कर सकते हैं और समझा सकते हैं कि आप क्या कर रहे हैं। अग्रिम में बहुत धन्यवाद – MZaragoza

+0

आपको मेरे उत्तर से क्या समझ में नहीं आया? मुझे वही त्रुटि मिली सवाल, परियोजना चलाने की कोशिश कर रहा था। ऐसा इसलिए था क्योंकि मैंने गलत पुस्तकालय से 'सेवा' आयात की है। –

1

मैं भी यही त्रुटि थी:

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Field repository in com.kalsym.next.gen.campaign.controller.CampaignController required a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' that could not be found. 


Action: 

Consider defining a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' in your configuration.de here 

और मेरे संकुल उसी तरह स्वीकार किए जाते हैं जवाब में उल्लिखित में निर्माण किया गया। मैंने मुख्य श्रेणी में EnableMongoRepositories एनोटेशन जोड़कर अपनी समस्या तय की:

@SpringBootApplication 
@EnableMongoRepositories(basePackageClasses = CustomerRepository.class) 
public class CampaignAPI { 

    public static void main(String[] args) { 
     SpringApplication.run(CampaignAPI.class, args); 
    } 
} 
संबंधित मुद्दे