Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字段需要找不到类型为的bean_Java_Spring Boot - Fatal编程技术网

Java 字段需要找不到类型为的bean

Java 字段需要找不到类型为的bean,java,spring-boot,Java,Spring Boot,我是一名SpringBoot学习者,所以我一直在尝试创建一些基本的SpringBoot应用程序。我试图运行开发的应用程序时出错 我犯的错误是 [![ StoreApiAPP.java: package io.ajithan.springbootstarter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication

我是一名SpringBoot学习者,所以我一直在尝试创建一些基本的SpringBoot应用程序。我试图运行开发的应用程序时出错

我犯的错误是 [![

StoreApiAPP.java:

package io.ajithan.springbootstarter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"io.ajithan.springbootstarter"})
public class StoreApiAPP {

    public static void main(String[] args) {
        SpringApplication.run(StoreApiAPP.class, args);

    }

}
ItemDetails.java:[软件包名称:io.ajithan.springbootstarter.model]

package io.ajithan.springbootstarter.model;


public class ItemDetails {
    private Integer itemId;
    private String itemName;
    private Double itemPrice;
    private String itemCategory;

    public ItemDetails() {

    }

    public ItemDetails(Integer itemId, String itemName, Double itemPrice, String itemCategory) {
        this.itemId = itemId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemCategory = itemCategory;
    }


    public Integer getItemId() {
        return itemId;
    }
    public void setItemId(Integer itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public Double getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(Double itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemCategory() {
        return itemCategory;
    }
    public void setItemCategory(String itemCategory) {
        this.itemCategory = itemCategory;
    }

}
package io.ajithan.springbootstarter.model;

public class ItemResponse {
public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

private String message;
}
package io.ajithan.springbootstarter.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;
import io.ajithan.springbootstarter.service.StoreService;

@RestController
public class StoreController {
    @Autowired
    private StoreService storeService; 

    @RequestMapping("/getAllItems")
    public List<ItemDetails> getItemDetailsList(){
        return storeService.getItemDetails();
    }

    @RequestMapping("/getSingleItem/{idNumber}")
    public ItemDetails getSingleItem(@PathVariable("idNumber") Integer id) {
        return storeService.getSingleItem(id);
    }

    @RequestMapping(method=RequestMethod.POST,value="/addItem")
    public ItemResponse addSingleItem(@RequestBody ItemDetails itemDetails) {
        return storeService.addSingleItem(itemDetails);
    }


}
package io.ajithan.springbootstarter.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;

@Service
public class StoreService {

    @Autowired
    private ItemResponse itemResponse;

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));
    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }

}
ItemResponse.java:[包名:io.ajithan.springbootstarter.model]

package io.ajithan.springbootstarter.model;


public class ItemDetails {
    private Integer itemId;
    private String itemName;
    private Double itemPrice;
    private String itemCategory;

    public ItemDetails() {

    }

    public ItemDetails(Integer itemId, String itemName, Double itemPrice, String itemCategory) {
        this.itemId = itemId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemCategory = itemCategory;
    }


    public Integer getItemId() {
        return itemId;
    }
    public void setItemId(Integer itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public Double getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(Double itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemCategory() {
        return itemCategory;
    }
    public void setItemCategory(String itemCategory) {
        this.itemCategory = itemCategory;
    }

}
package io.ajithan.springbootstarter.model;

public class ItemResponse {
public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

private String message;
}
package io.ajithan.springbootstarter.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;
import io.ajithan.springbootstarter.service.StoreService;

@RestController
public class StoreController {
    @Autowired
    private StoreService storeService; 

    @RequestMapping("/getAllItems")
    public List<ItemDetails> getItemDetailsList(){
        return storeService.getItemDetails();
    }

    @RequestMapping("/getSingleItem/{idNumber}")
    public ItemDetails getSingleItem(@PathVariable("idNumber") Integer id) {
        return storeService.getSingleItem(id);
    }

    @RequestMapping(method=RequestMethod.POST,value="/addItem")
    public ItemResponse addSingleItem(@RequestBody ItemDetails itemDetails) {
        return storeService.addSingleItem(itemDetails);
    }


}
package io.ajithan.springbootstarter.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;

@Service
public class StoreService {

    @Autowired
    private ItemResponse itemResponse;

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));
    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }

}
StoreController.java:[包名:io.ajithan.springbootstarter.controller]

package io.ajithan.springbootstarter.model;


public class ItemDetails {
    private Integer itemId;
    private String itemName;
    private Double itemPrice;
    private String itemCategory;

    public ItemDetails() {

    }

    public ItemDetails(Integer itemId, String itemName, Double itemPrice, String itemCategory) {
        this.itemId = itemId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemCategory = itemCategory;
    }


    public Integer getItemId() {
        return itemId;
    }
    public void setItemId(Integer itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public Double getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(Double itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemCategory() {
        return itemCategory;
    }
    public void setItemCategory(String itemCategory) {
        this.itemCategory = itemCategory;
    }

}
package io.ajithan.springbootstarter.model;

public class ItemResponse {
public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

private String message;
}
package io.ajithan.springbootstarter.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;
import io.ajithan.springbootstarter.service.StoreService;

@RestController
public class StoreController {
    @Autowired
    private StoreService storeService; 

    @RequestMapping("/getAllItems")
    public List<ItemDetails> getItemDetailsList(){
        return storeService.getItemDetails();
    }

    @RequestMapping("/getSingleItem/{idNumber}")
    public ItemDetails getSingleItem(@PathVariable("idNumber") Integer id) {
        return storeService.getSingleItem(id);
    }

    @RequestMapping(method=RequestMethod.POST,value="/addItem")
    public ItemResponse addSingleItem(@RequestBody ItemDetails itemDetails) {
        return storeService.addSingleItem(itemDetails);
    }


}
package io.ajithan.springbootstarter.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;

@Service
public class StoreService {

    @Autowired
    private ItemResponse itemResponse;

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));
    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }

}
包io.ajithan.springbootstarter.controller;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RestController;
导入io.ajithan.springbootstarter.model.ItemDetails;
导入io.ajithan.springbootstarter.model.ItemResponse;
导入io.ajithan.springbootstarter.service.StoreService;
@RestController
公共类存储控制器{
@自动连线
私人商店服务;
@请求映射(“/getAllItems”)
公共列表getItemDetailsList(){
return storeService.getItemDetails();
}
@RequestMapping(“/getSingleItem/{idNumber}”)
public ItemDetails getSingleItem(@PathVariable(“idNumber”)整数id){
return storeService.getSingleItem(id);
}
@RequestMapping(method=RequestMethod.POST,value=“/addItem”)
public ItemResponse addSingleItem(@RequestBody ItemDetails ItemDetails){
return storeService.addSingleItem(itemDetails);
}
}
StoreService.java:[包名:io.ajithan.springbootstarter.service]

package io.ajithan.springbootstarter.model;


public class ItemDetails {
    private Integer itemId;
    private String itemName;
    private Double itemPrice;
    private String itemCategory;

    public ItemDetails() {

    }

    public ItemDetails(Integer itemId, String itemName, Double itemPrice, String itemCategory) {
        this.itemId = itemId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemCategory = itemCategory;
    }


    public Integer getItemId() {
        return itemId;
    }
    public void setItemId(Integer itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public Double getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(Double itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemCategory() {
        return itemCategory;
    }
    public void setItemCategory(String itemCategory) {
        this.itemCategory = itemCategory;
    }

}
package io.ajithan.springbootstarter.model;

public class ItemResponse {
public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

private String message;
}
package io.ajithan.springbootstarter.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;
import io.ajithan.springbootstarter.service.StoreService;

@RestController
public class StoreController {
    @Autowired
    private StoreService storeService; 

    @RequestMapping("/getAllItems")
    public List<ItemDetails> getItemDetailsList(){
        return storeService.getItemDetails();
    }

    @RequestMapping("/getSingleItem/{idNumber}")
    public ItemDetails getSingleItem(@PathVariable("idNumber") Integer id) {
        return storeService.getSingleItem(id);
    }

    @RequestMapping(method=RequestMethod.POST,value="/addItem")
    public ItemResponse addSingleItem(@RequestBody ItemDetails itemDetails) {
        return storeService.addSingleItem(itemDetails);
    }


}
package io.ajithan.springbootstarter.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;

@Service
public class StoreService {

    @Autowired
    private ItemResponse itemResponse;

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));
    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }

}
包io.ajithan.springbootstarter.service;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入io.ajithan.springbootstarter.model.ItemDetails;
导入io.ajithan.springbootstarter.model.ItemResponse;
@服务
公共类存储服务{
@自动连线
私有项响应项响应;
private List itemDetailsList=新建ArrayList(Arrays.asList(
新项目详情(1,“5Rs GOODDAY饼干”,5.00,“甜食”),
新项目详情(2,“10Rs GOODAY饼干”,10.00,“咸”),
新项目详情(3,“25卢比古德饼干”,25.00,“奶油”)
));
公共列表getItemDetails()
{
返回itemDetailsList;
}
public ItemDetails getSingleItem(整数id){
返回itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
}
public ItemResponse addSingleItem(ItemDetails ItemDetails){
itemDetailsList.add(itemDetails);
setMessage(“项目添加成功”);
返回项目响应;
}
}

有人能给我这个问题的解决方案吗?

您必须在应用程序中定义ItemResponse bean:

首先在ItemResponse类中添加@Component符号,如下所示:

@Component
public class ItemResponse {
    private String message;

    //** Default Constructor 
    public ItemResponse() {
    }

    //** getter and setter
}
在类配置的某个地方,您必须告诉spring ItemResponse是一个需要注入的bean。如果您有一个带有@configuration符号的类,则声明您的bean,否则创建一个配置类,例如在名为“config”的包中:


别忘了在bean中放一个默认构造函数。祝你好运!

在这种情况下,自动连接
项响应是非常危险的

默认情况下,Spring中的bean是单实例,因此现在有一个
ItemResponse
的单个实例。现在想象50个并发线程更改
ItemResponse
的单个实例,您认为每个线程将有什么输出

在您的情况下,唯一正确的解决方案是删除autowired字段,并在
addSingleItem
方法中构造一个新的
ItemResponse
,然后返回它。这样就没有共享状态

@Service
public class StoreService {

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));

    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        ItemResponse itemResponse = new ItemResponse();
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }
}
@服务
公共类存储服务{
private List itemDetailsList=新建ArrayList(Arrays.asList(
新项目详情(1,“5Rs GOODDAY饼干”,5.00,“甜食”),
新项目详情(2,“10Rs GOODAY饼干”,10.00,“咸”),
新项目详情(3,“25卢比古德饼干”,25.00,“奶油”)
));
公共列表getItemDetails()
{
返回itemDetailsList;
}
public ItemDetails getSingleItem(整数id){
返回itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
}
public ItemResponse addSingleItem(ItemDetails ItemDetails){
itemDetailsList.add(itemDetails);
ItemResponse ItemResponse=新的ItemResponse();
setMessage(“项目添加成功”);
返回项目响应;
}
}

当然可以。您需要为每个API响应创建一个新的ItemResponse。因此,它不能自动连接,它应该是一个局部变量,而不是一个实例变量。请这样做。(如果您有理由这样做,它可以自动连接,并且它是有意义的。您没有理由这样做,也没有意义,所以不要这样做)是否有可能提供最简单、更精确的代码部分来重现他的问题?同意@kumesana,如果Autowired没有注释为组件/服务…,则不能使用Autowired,并且响应对象不应该是实例变量,除非它是缓存值,每个请求都会得到相同的值e、 那么,你能解释一下我什么时候可以使用@Component注释吗?不要。他应该删除autowired字段,然后在方法内部构造一个新实例。否则,一个实例将在