簡體   English   中英

如何防止控制器方法在Chrome瀏覽器的Spring Boot中運行兩次?

[英]How can I prevent controller methods from running twice in spring boot in chrome browser?

我正在使用帶有postgresql的spring boot將表中的行保存並打印表中的行。 我的問題是,所有WebController方法都被執行兩次,但僅當我在chrome中打開url時才執行。 如果我在Internet Explorer中執行此操作,則效果很好。 如何在Chrome瀏覽器中停止此操作?

我將四個文件的代碼作為參考,盡管我認為代碼中沒有任何問題。 我是否需要更改瀏覽器設置或其他內容?

User.java

@Entity
@Table(name="users")
public class User implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name="name")
    private String name;

    @Column(name="email")
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    @Override
    public String toString() {
        return String.format("User[id=%d, name='%s', email='%s']",this.id,this.name,this.email);
    }
}

UserRepository.java

public interface UserRepository extends JpaRepository<User, Long>{

}

WebController.java

@RestController 
public class WebController {

    @Autowired
    private UserRepository repository;

    @GetMapping("home")
    public String home() {
        System.out.println("whaaat");
        return "hi";
    }

    @GetMapping("/save")
    public String process() {

        repository.save(new User("vidhi","vd@gmail.com"));
        System.out.print("apple ");
        return "Done";
    }

    @RequestMapping("findall")
    public String findAll() {
        String result = "";

        for(User u: repository.findAll()) {
            result += u.toString() + "<br>";
        }

        return result;
    }

}

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username=postgres
spring.datasource.password= 
spring.jpa.generate-ddl=true
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false

我知道方法要運行兩次,因為在表中重復添加了兩行,並且“ whaaat”在控制台中打印了兩次,但僅在chrome中才打印兩次。 任何幫助都會很棒。

謝謝你的時間。

第一。 嘗試使用Chrome開發者工具中的“網絡”標簽(嘗試按F12按鈕)來確定實際發送了多少個請求。 在此處輸入圖片說明

第二。 通常,在“ GET”請求中保存任何數據不是一個好主意,因為它的語義,瀏覽器不希望在服務器端進行更改,而是可以多次調用請求(無法產生用例,但這是完全可以的)不禁止瀏覽器執行此操作)或從緩存中獲取。

暫無
暫無

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

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