簡體   English   中英

如何修復 spring 引導中的 500 內部錯誤

[英]How to fix 500 internal error in spring boot

我真的很難解決restapi中的500個內部錯誤。

當我使 GET 和 POST 請求正常工作但當我使 PUT、DELETE 和 findById GET 請求不起作用時。 如果我嘗試發出請求,它將顯示 500 內部錯誤。 我不知道為什么會這樣,所以請幫助我。 先感謝您。 Family1.class

@Entity
public class Family1 {
    
    @Id 
    private long id;
    private String Name;
    private int Member;
    private long contactNo;
    @Embedded
    public Address address;
// getters,setters

Family1Controller.class

@RestController
@RequestMapping(value = "/family1")
public class Family1Controller {
    
    @Autowired
    private Family1Service family1Service;

@RequestMapping("/fam1")
    public List<Family1> getAllFamily1(){
        return family1Service.getAllFamily1();
    }
@RequestMapping(method=RequestMethod.POST,value="/fam1") 
    public void addFamily1(@RequestBody Family1 family1){
        family1Service.addFamily1(family1);   
     }
@RequestMapping(method=RequestMethod.GET,value="/fam1/{id}")
    public Family1 getFamily1Id(@PathVariable long id) {
        List<Family1> family=family1Service.getFamily1Id(id);
        return family.get((int) id);
}
@RequestMapping(method=RequestMethod.PUT,value="/fam1/{id}")
     public Family1 updateFamily1(@RequestBody Family1 family1, @PathVariable("id") long id){
        family1.setId(id);
        return family1Service.updateFamily1(family1);   
    }
@RequestMapping(method=RequestMethod.DELETE,value="/fam1/{id}")
    public void deleteFamily1(@PathVariable("id") long id) {
        family1Service.deleteFamily1(id);
    }

}

Family1Service.class


@Service
public class Family1Service {
    
    private Family1Repository family1Repository;
     
    private List<Family1> family=new ArrayList<>(Arrays.asList(
            new Family1(1,"abc",3,32423423,new Address("east street","xxxxxx",23456)),
            new Family1(2,"xyz",4,354646,new Address("west street","yyyyyy",23456)),
            ));
    
    public  List<Family1> getAllFamily1() {
        return family;
    }
    public List<Family1> getFamily1Id(long id){
        family1Repository.findById(id);
        return family;
    }
    public void addFamily1(Family1 family1) {
        family.add(family1);
    }
    
    public Family1 updateFamily1(Family1 family1) {
        return family1Repository.save(family1); 
    }
    public void deleteFamily1(long id) {
        family1Repository.deleteById(id);
    }
}

Family1Repository.class

public interface Family1Repository extends CrudRepository<Family1, String>  {

    public void deleteById(long id);

    public void save(Family1 family1, long id);

    public void findById(long id);

Family1application.class

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class Family1Application {

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

錯誤:

{
    "timestamp": "2021-01-06T07:32:49.232+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "",
    "path": "/family1/fam1/1"
}

您正在混合對預定義列表的調用與對存儲庫的調用。 列表中的元素在數據庫中沒有表示,因此當您使用這些 ID 刪除存儲庫中的對象時,它們是無效的。

您可能想嘗試這樣的事情:

@Service
public class Family1Service {
    
    private Family1Repository family1Repository;
    
    public  List<Family1> getAllFamily1() {
        return family1Repository.findAll();
    }

    public Family1 getFamily1Id(long id){
        return family1Repository.findById(id).orElseThrow(); 
        // This returns an Optional orElseThrow will create an error if nothing is found
    }

    public void addFamily1(Family1 family1) {
        family1Repository.save(family1);
    }
    
    public Family1 updateFamily1(Family1 family1) {
        return family1Repository.save(family1); 
    }

    public void deleteFamily1(long id) {
        family1Repository.deleteById(id);
    }
}

在 controller 中:

@RestController
@RequestMapping(value = "/family1")
public class Family1Controller {
    
    @Autowired
    private Family1Service family1Service;

    @RequestMapping("/fam1")
    public List<Family1> getAllFamily1(){
        return family1Service.getAllFamily1();
    }

    @RequestMapping(method=RequestMethod.POST, value="/fam1") 
    public void addFamily1(@RequestBody Family1 family1){
        family1Service.addFamily1(family1);   
     }

    @RequestMapping(method=RequestMethod.GET, value="/fam1/{id}")
    public Family1 getFamily1Id(@PathVariable long id) {
        return family1Service.getFamily1Id(id);
     }

     @RequestMapping(method=RequestMethod.PUT, value="/fam1")
     public Family1 updateFamily1(@RequestBody Family1 family1){
        return family1Service.updateFamily1(family1);   
    }

    @RequestMapping(method=RequestMethod.DELETE, value="/fam1/{id}")
    public void deleteFamily1(@PathVariable("id") long id) {
        family1Service.deleteFamily1(id);
    }
}
public interface Family1Repository extends CrudRepository<Family1, long>  {
    // All repository methods you need are already provided by the CrudRepository
}

我刪除了您在Family1Service中使用的列表,以避免數據庫中不存在數據。 當調用存儲庫的findAll()方法時,這可能會導致空結果。

請注意,我沒有時間對此進行全面測試,但一般方法應該可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM