[英]Testing a Spring app using REST controllers in Postman
所以,我的代碼是這樣的:
BasicApp.java
@SpringBootApplication(exclude=HibernateJpaAutoConfiguration.class)
public class BasicApp {
public static void main(String[] args) {
SpringApplication.run(BasicApp.class, args);
}
}
ControllerHome.java
@Controller
@RequestMapping()
public class ControllerHome {
@RequestMapping(method = RequestMethod.GET)
public String index() {
return "index";
}
}
LessonController.java
@Slf4j
@Controller
@RequestMapping
@SessionAttributes({"types", "positions", "lectureList", "published"})
public class ControllerLecture {
List<Lecture> lectureList= new ArrayList<>();
@RequestMapping
public String newLecture() {
return "newLecture";
}
@GetMapping("/newLecture")
public String showForm(Model model, Lecture lecture) {
log.info("Filling data to show form.");
model.addAttribute("lecture", new Lecture ());
model.addAttribute("types", Lecture.LectureType.values());
model.addAttribute("positions", Lecturer.LecturerPositions.values());
model.addAttribute("published", lecture.getPublished());
return "newLecture";
}
@GetMapping("/allLectures")
public String showLectures() {
return "allLectures";
}
@GetMapping("/resetCounter")
public String resetCounter(SessionStatus status) {
lectureList.clear();
status.setComplete();
return "redirect:/newLecture";
}
@PostMapping("/newLecture")
public String processForm(@Valid Lecture lecture, Errors errors, Model model) {
log.info("Processing lecture: " + lecture);
if(errors.hasErrors()) {
log.info("Lecture has errors. Ending.");
return "newLecture";
} else {
lectureList.add(lecture);
model.addAttribute("numberOfLectures", lectureList.size());
model.addAttribute("lecture", lecture);
model.addAttribute("published", lecture.getPublished());
model.addAttribute("lectureList", lectureList);
log.info("Lecture successfully saved: " + lecture);
return "output";
}
}
}
LectureRestController.java
@RestController
@RequestMapping(path="/lecture", produces="application/json")
@CrossOrigin(origins="*")
public class LectureRestController {
@Autowired
LectureRepository lectureRepository;
@GetMapping
public Iterable<Predavanje> findAll() {
return lectureRepository.findAll();
}
@GetMapping("/{id}")
public ResponseEntity<Lecture> findOne(@PathVariable Long id) {
Lecture lecture = lectureRepository.findOne(id);
if(lecture != null) {
return new ResponseEntity<>(lecture, HttpStatus.OK);
} else {
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
}
}
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(consumes="application/json")
public Lecture save(@RequestBody Lecture lecture) {
return lectureRepository.save(lecture);
}
@PutMapping("/{id}")
public Predavanje update(@RequestBody Lecture lecture) {
lectureRepository.update(lecture);
return lecture;
}
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping("/{id}")
public void delete (@PathVariable Long id) {
lectureRepository.delete(id);
}
}
LectureRepository.java(接口)
import ... .Lecture;
public interface LectureRepository {
Iterable<Lecture> findAll();
Lecture findOne(Long id);
Lecture save(Lecture lecture);
Lecture update(Lecture lecture);
void delete(Long id);
}
HibernateLectureRepository.java
@Primary
@Repository
@Transactional
public class HibernateLectureRepository implements LectureRepository {
private SessionFactory sessionFactory;
@Autowired
public HibernateLectureRepository(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public Iterable<Lecture> findAll() {
return sessionFactory.getCurrentSession().createQuery("SELECT p FROM Lecture p", Lecture.class).getResultList();
}
@Override
public Lecture findOne(Long id) {
return sessionFactory.getCurrentSession().find(Lecture.class, id);
}
@Override
public Lecture save(Lecture lecture) {
lecture.setEntryDate(new Date());
Serializable id = sessionFactory.getCurrentSession().save(lecture);
lecture.setId((Long)id);
return lecture;
}
@Override
public Lecture update(Lecture lecture) {
sessionFactory.getCurrentSession().update(lecture);
return lecture;
}
@Override
public void delete(Long id) {
Lecture lecture = sessionFactory.getCurrentSession().find(Lecture.class, id);
sessionFactory.getCurrentSession().delete(lecture);
}
}
使用Postman工具測試此應用程序時出現問題。 我知道在Spring Tool Suite中啟動應用程序后,我轉到站點(localhost:8080)並在那里輸入數據(基本講義數據:名稱,簡短內容,講師...),但是當我鍵入URL時在郵遞員里 http:// localhost:8080 / lecture / 1 ,結果什么也沒打印出來,我也不知道為什么。
我使用的模板是:index.html(主頁),login.html(登錄頁面),output.html(顯示之前輸入的講座數據的頁面),newLecture.html(用於輸入講座的表單)和allLectures。 html(顯示所有已創建演講的輸出的頁面)。 我沒有LectureRestController.java類中提到的任何名為“ lecture”的模板,這是問題嗎? 因為如果是這樣,我不知道該如何創建一個將填充有關講座數據的文件。
更新:
這是郵差的反應在打字時的http://本地主機:8080 /演講 postman1這是郵差的反應在打字時的http://本地主機:8080 /演講/ 1 postman2
我已經解決了,問題是我實際上沒有在LessonController.java
類中,特別是在else塊中的processForm
方法中調用方法.save()
。 我已經創建了HibernateLectureRepository.java
類的@Autowired
實例,然后在上述位置插入了該實例,並調用了.save()
方法。
感謝@EbertToribio在評論中提供的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.