我有一个应用程序,我有一个html页面,通过文本框接受用户输入。这是一个REST Spring框架,分为Controller,Entity,Service,Repository,View和主应用程序类。
我接受一个输入值并在Mongodb数据库中搜索,如果该值存在,我将实体对象从Service返回到Controller。控制器返回相同的Entity View对象.-在这种情况下为PersonView。我得到了一个JSON数据。
只要数据库中有记录,上述方案就可以正常工作。如果记录不存在,则返回空JSON。我的Controller返回Person View Object,我不希望更改签名并将返回类型设为String,因为在这种情况下它返回HTML页面上的地址。 考虑到这一点,当数据库中没有记录时我应该如何处理这种情况,并且我希望在同一个HTML页面上显示一条消息,说明没有可用的记录。
我尝试抛出异常,但在这种情况下,如何在我的HTML上显示消息,因为我的Controller返回JSON对象而我不想更改其签名?
控制器类如下:
public PersonView searchPerson(@PathVariable String pname) {
List<Person> pList= PersonService.searchPerson(pname);
PersonView personView = new PersonView();
personView.setPersonView(pList);
return personView;
编辑:
这是我在Controller中调用的personView类的函数:
public List<Person> setPersonView() {
this.personView = personView;
}
这是服务Impl类:
public List<Person> searchPerson(String name) throws Exception {
List<Person> personlist= new ArrayList<Person>();
personlist = personRepository.findByName(name);
if (personlist.isEmpty())
throw new Exception("Records not found in the the database");
return personlist;
}
答案 0 :(得分:0)
创建自定义Exception类:
public class EntityNotFoundException extends RuntimeException {
public EntityNotFoundException(String message) {
super(message);
}
}
现在,在您的控制器代码中:
public List<Person> searchPerson(String name) {
List<Person> personlist= new ArrayList<Person>();
personlist = personRepository.findByName(name);
if (personlist.isEmpty()) {
throw new EntityNotFoundException("Records not found in the the database");
}
return personlist;
}
之后你可以在控制器类中尝试这样的事情:
private static final MappingJacksonJsonView JSON_VIEW = new MappingJacksonJsonView();
@ExceptionHandler(EntityNotFoundException.class)
public ModelAndView handleNotFoundException( Exception ex )
{
return new ModelAndView(JSON_VIEW, "error", new ErrorMessage("No Record in Db") );
}
您的ErrorMessage类可以是一个简单的POJO:
public class ErrorMessage {
private String message;
ErrorMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
答案 1 :(得分:0)
虽然已经回答,但我会在这里添加一些观点。
请注意,在某些时候您需要发送 标题,响应主体(使用不同的对象)。因此,请考虑使用ResponseEntity Object,它将成为List的包装器。这是示例代码。
public ResponseEntity<List<Person>> searchPerson(String name) {
List<Person> personlist= new ArrayList<Person>();
personlist = personRepository.findByName(name);
if (personlist.isEmpty()) {
return new ResponseEntity(new EntityNotFoundException("Records not found in the the database"), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity(personlist , HttpStatus.OK);
}
响应实体对象在更大程度上提供了灵活性。阅读此处的文档。 https://docs.spring.io/spring/docs/current/javadocapi/org/springframework/http/ResponseEntity.html