当数据库中的记录为空时,在 HTML 上向用户显示消息而不是空 JSON

Display Message to User instead of empty JSON on HTML when records are empty in the database

我有一个应用程序,其中有一个 html 页面,该页面通过 textbox.This 接受用户输入是一个 REST Spring 框架,分为控制器、实体、服务、存储库、视图和主应用程序 class。

我输入一个值并在 Mongodb 数据库中搜索,如果该值存在,我 return 从服务到控制器的实体对象。控制器 return 是同一个实体视图对象。- 在本例中为 PersonView。我得到一个 JSON 数据。

只要数据库中有记录,上述方案就可以正常工作。如果记录不存在,则 return 为空 JSON。我的控制器 returns Person View Object 并且我不想更改签名并将 return 类型设为 String 因为在那种情况下它 returns 我的 [=33= 上的地址] 页。 考虑到这一点,当数据库中没有记录并且我希望在同一 HTML 页面上显示一条消息说没有可用记录时,我应该如何处理这种情况。

我尝试抛出异常,但在这种情况下也是如此,考虑到我的控制器 returns JSON 对象并且我不希望在 HTML 上显示消息更改其签名?

控制器Class如下:

 public PersonView searchPerson(@PathVariable String pname) {
      List<Person> pList= PersonService.searchPerson(pname);
       PersonView personView = new PersonView();

    personView.setPersonView(pList);



    return personView;

编辑:

这是我在 Controller 中调用的来自 personView Class 的函数:

  public List<Person> setPersonView() {
    this.personView = personView;
}

这是服务实现 class:

    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;

    }

创建自定义异常 class:

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;
}

之后你可以在你的控制器中尝试这样的事情 class:

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 class 可以是一个简单的 POJO:

public class ErrorMessage {
    private String message;
    ErrorMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

虽然已经回答了,但我会在这里补充一些观点。

请注意,有时您需要发送 headers,响应 body(具有不同的 Object)。因此,请考虑使用 ResponseEntity Object,它将成为您列表的包装器。这是示例代码。

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);
}

响应实体Object 提供更大范围的灵活性。在此处阅读文档。 https://docs.spring.io/spring/docs/current/javadocapi/org/springframework/http/ResponseEntity.html