該應用程式有 2 個功能,我可以在其中創建新的腳本檔案并編輯現有的腳本檔案。我對創建和編輯的邏輯基本上是相同的,唯一的主要區別是編輯而不是創建新腳本,我必須找到現有的腳本并覆寫它。我不確定我應該如何在 spring boot 中通過 id 查找腳本。
這是我的創建腳本功能:
控制器類:
@Controller
@RequestMapping("/api/auth/")
public class TestServerController {
@Autowired
ScriptsRepository scriptsRepository;
@Autowired
LineItemRepository lineItemRepository;
@Autowired
LineItemDataRepository lineItemDataRepository;
public TestServerController() {
}
@CrossOrigin(origins = "*")
@RequestMapping(value = "createScript")
public ResponseEntity<?> createScript(@RequestBody String body, @RequestParam String name) throws Exception {
JSONArray script = new JSONArray(body);
Scripts new_script = new Scripts(name);
scriptsRepository.save(new_script);
for (int i = 0;i<script.length();i ) {
JSONObject current_line_item = (JSONObject) script.get(i);
if(!current_line_item.has("keyword") ){
return ResponseEntity
.badRequest()
.body(new MessageResponse("Invalid Json Object"));
}
String keyword = current_line_item.getString("keyword");
LineItem new_li = new LineItem(keyword,i);
new_li.setSid(new_script);
lineItemRepository.save(new_li);
int order = 0;
var keys = current_line_item.keys();
for (Iterator<String> it = keys; it.hasNext(); ) {
var key = it.next();
if(key.equals("keyword")){
continue;
}
var value = current_line_item.getString(key);
// we will need to do something about this if the column values arent strings
LineItemData vb = new LineItemData(key,value,order);
vb.setLid(new_li);
lineItemDataRepository.save(vb);
order ;
}
}
return ResponseEntity.ok(new MessageResponse("Script Uploaded Successfully"));
}
對于編輯腳本,我正在考慮洗掉 Scripts new_script = new Scripts(name);
并使用 findbyId 在資料庫中查找腳本并將其傳遞到 scriptsRepository.save(new_script);
where 而不是 new_script,我只需要使用 id 的腳本檔案。這對我不起作用,我遇到了錯誤。還有其他方法可以解決這個問題嗎?
uj5u.com熱心網友回復:
當您使用scriptsRepository.save(script)時,它會將腳本保存在您的資料庫中。但是,如果您在資料庫中已經有一個腳本,其 ID 與您通過引數傳遞的那個腳本的 ID 相同,它將不會創建一個新腳本,而只是使用您嘗試保存的那個腳本的資訊來更新它。
遵循 REST API 設計的腳本控制器(僅使用更新方法)將是這樣的:
@RestController
@RequestMapping("/scripts")
public class ScriptController {
@Autowired
ScriptRepository scriptRepository;
@PutMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public Script update(@RequestBody Script script, @PathVariable long id) {
if (scriptRepository.findById(id).isEmpty()) {
throw new RecordNotFoundException();
}
script.setId(id);
return scriptRepository.save(script);
}
}
要訪問它,您需要使用端點localhost:8080/scripts/{id}(如果您使用默認的 Spring Boot localhost:8080)。
您不需要拋出例外,但如果您愿意,您需要創建一個像這樣的簡單類:
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class RecordNotFoundException extends RuntimeException {
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431809.html
