Spring MVC“请求处理失败” 500错误

肥胖者

我是Spring的新手,正在尝试学习教程。而且我有一个问题。我将基于xml的配置转换为基于注释的配置。是教程。

而且我收到HTTP 500错误。这是完整的堆栈跟踪。

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause


root cause

   java.lang.NullPointerException   com.ulotrix.spring.service.PersonServiceImpl.listPersons(PersonServiceImpl.java:35) 
    com.ulotrix.spring.controller.PersonController.listPersons(PersonController.java:28)    

     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

项目结构

AppConfig.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.ulotrix.spring" })
public class AppConfig extends WebMvcConfigurerAdapter {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

@Bean
public SessionFactory sessionFactory() {

    LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource());
    builder.scanPackages("com.ulotrix.spring.model");
    builder.addProperties(getHibernationProperties());

    return builder.buildSessionFactory();
}

private Properties getHibernationProperties() {

    Properties prop = new Properties();
    prop.put("hibernate.format_sql", "true");
    prop.put("hibernate.show_sql", "true");
    prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

    return prop;
}

@Bean(name = "dataSource")
public BasicDataSource dataSource() {

    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUrl("jdbc:mysql://localhost:3306/deneme_db2");
    ds.setUsername("root");
    ds.setPassword("xxxx");

    return ds;
}

@Bean
public HibernateTransactionManager txManger() {
    return new HibernateTransactionManager(sessionFactory());
}

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

}

PersonService.java

public interface PersonService {

public void addPerson(Person p);
public void updatePerson(Person p);
public List<Person> listPersons();
public Person getPersonById(int id);
public void removePerson(int id);

}

PersonServiceImpl.java

@Service("personService")
public class PersonServiceImpl implements PersonService {

private PersonDAO personDAO;

public void setPersonDAO(PersonDAO personDAO) {
    this.personDAO = personDAO;
}

@Override
@Transactional
public void addPerson(Person p) {
    this.personDAO.addPerson(p);
}

@Override
@Transactional
public void updatePerson(Person p) {
    this.personDAO.updatePerson(p);
}

@Override
@Transactional
public List<Person> listPersons() {
    return this.personDAO.listPersons();
}

@Override
@Transactional
public Person getPersonById(int id) {
    return this.personDAO.getPersonById(id);
}

@Override
@Transactional
public void removePerson(int id) {
    this.personDAO.removePerson(id);
}
}

PersonController.java

@Controller
public class PersonController {

private PersonService personService;

@Autowired(required = true)
@Qualifier(value = "personService")
public void setPersonService(PersonService ps) {
    this.personService = ps;
}

@RequestMapping(value = "/persons", method = RequestMethod.GET)
public String listPersons(Model model) {
    model.addAttribute("person", new Person());
    model.addAttribute("listPersons", this.personService.listPersons());
    return "person";
}

//For add and update person both
@RequestMapping(value = "/person/add", method = RequestMethod.POST)
public String addPerson(@ModelAttribute("person") Person p) {

    if(p.getId() == 0) {
        this.personService.addPerson(p);
    }else {
        this.personService.updatePerson(p);
    }
    return "redirect:/persons";
}

@RequestMapping(value = "/remove/{id}")
public String removePerson(@PathVariable("id") int id) {

    this.personService.removePerson(id);
    return "redirect:/persons";
}

@RequestMapping(value = "/edit/{id}")
public String editPerson(@PathVariable("id") int id, Model model) {
    model.addAttribute("person", this.personService.getPersonById(id));
    model.addAttribute("listPersons", this.personService.listPersons());
    return "person";
}
}

PersonDAO.java

public interface PersonDAO {

public void addPerson(Person p);
public void updatePerson(Person p);
public void removePerson(int id);
public List<Person> listPersons();
public Person getPersonById(int id);

}

PersonDAOImpl.java

@Component
public class PersonDAOImpl implements PersonDAO {

private static final Logger logger = LoggerFactory.getLogger(PersonDAOImpl.class);

private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sf) {
    this.sessionFactory = sf;
}

@Override
public void addPerson(Person p) {
    Session session = this.sessionFactory.getCurrentSession();
    session.persist(p);
    logger.info("Person saved successfully, Person Details="+p);
}

@Override
public void updatePerson(Person p) {
    Session session = this.sessionFactory.getCurrentSession();
    session.update(p);
    logger.info("Person updated successfully, Person Details="+p);
}

@SuppressWarnings("unchecked")
@Override
public List<Person> listPersons() {
    Session session = this.sessionFactory.getCurrentSession();
    List<Person> personList = session.createQuery("from Person").list();
    for(Person p: personList) {
        logger.info("Person List::"+p);
    }
    return personList;
}

@Override
public Person getPersonById(int id) {
    Session session = this.sessionFactory.getCurrentSession();
    Person p = (Person) session.load(Person.class, new Integer(id));
    logger.info("Person loaded successfully, Person details="+p);
    return p;
}

@Override
public void removePerson(int id) {
    Session session = this.sessionFactory.getCurrentSession();
    Person p = (Person) session.load(Person.class, new Integer(id));
    if(null != p) {
        session.delete(p);
    }
    logger.info("Person deleted successfully, person details="+p);
}

}

更多例外

 exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
柴坦亚

您错过了包含@Autowired注入依赖项的操作。

1)在PersonServiceImpl

@Autowired
private PersonDAO personDAO;

2)在PersonDAOImpl

@Autowired
private SessionFactory sessionFactory;

最后,您需要通过@EnableTransactionManagement在Spring配置类中使用来启用事务管理

@EnableWebMvc
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.ulotrix.spring" })
public class AppConfig extends WebMvcConfigurerAdapter {

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring MVC错误请求与@requestbody

来自分类Dev

Spring MVC Ajax 400错误请求

来自分类Dev

Spring MVC返回视图抛出500错误

来自分类Dev

Spring MVC 404错误http请求

来自分类Dev

Spring MVC 400错误请求Ajax

来自分类Dev

Spring MVC处理AJAX请求

来自分类Dev

Spring MVC“请求处理失败” 500错误

来自分类Dev

Spring MVC的Freemarker模板错误处理

来自分类Dev

Spring MVC损坏的请求参数处理

来自分类Dev

无法通过Spring 4查询数据库(HTTP 500请求处理失败)

来自分类Dev

ASP.NET MVC处理请求错误

来自分类Dev

Ajax调用Spring MVC Controler错误的请求

来自分类Dev

我如何在Spring Boot / MVC中创建错误处理程序(404、500 ...)

来自分类Dev

Spring MVC 3.2 Jackson错误请求

来自分类Dev

Spring MVC 404错误http请求

来自分类Dev

Spring MVC请求处理错误(404)

来自分类Dev

HTTP状态500-请求处理失败;

来自分类Dev

Spring MVC AJAX错误请求错误

来自分类Dev

Spring Resfull错误HTTP状态500

来自分类Dev

从Ajax到Spring MVC的请求。404错误

来自分类Dev

错误:请求失败:迅速的错误请求(400)afnetworking批处理

来自分类Dev

Ajax调用Spring MVC Controler错误的请求

来自分类Dev

代码= -1011“请求失败:内部服务器错误(500)

来自分类Dev

Spring MVC处理未映射的请求

来自分类Dev

VueJS HTTP 请求错误 500 处理

来自分类Dev

Spring Boot:如何记录 httpStatus 500 错误

来自分类Dev

未捕获(承诺)错误:请求失败,状态码为 500

来自分类Dev

Spring redis 返回 500 stackoverflow 错误

来自分类Dev

错误:请求失败,状态码为 500 Laravel/Vue