java - 使用 Struts2 和 hibernate 创建 Web 服务(SOAP 或 REST)

标签 java spring hibernate rest struts2

我在使用 struts 2 和 hibernate 调用 Web 服务时遇到问题...

HTTP Status 500 - Unable to instantiate Action, actions.events.rest.EventController, defined for 'event' in namespace '/'Error creating bean with name 'actions.events.rest.EventController': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [actions.events.rest.EventController]: Constructor threw exception; nested exception is java.lang.NullPointerException

这是我的来源:

事件 Controller :

public class EventController extends BaseAction implements ModelDriven<Object> {
private static final long serialVersionUID = 1L;
private String id;
private Object model; 

private static Map<String, Event> map;
{ 
    List<Event> events = services.getEvents();
    for(Event event : events){
        map.put(event.getId() + "", event);
    } 
}

public HttpHeaders index() {
    model = map;
    return new DefaultHttpHeaders("index").disableCaching();
}

public String add(){ 
    services.createEvent("Event1");
    return "SUCCESS";
}

public String getId() {
    return id;
}
public void setId(String id) {
    Integer iid = Integer.parseInt(id);
    model = services.getEventById(iid);
    this.id = id;
}

public Object getModel() {
    return model;
} 

基础 Action :

public class BaseAction extends ActionSupport {
// So that spring can inject the business singleton
protected Services services;

public void setServices(Services value) {
    services=value;
}

// For redirect results
protected String redirectUrl;

public String getRedirectUrl() {
    return redirectUrl;
}

public String redirect(String to) {
    redirectUrl = to;
    return "redirect";
}

当我调试时,我在 List<Event> events = services.getEvents(); 中遇到错误在 EventController .它可以是什么?

最佳答案

  • 异常是由于
    您从静态初始化 block 中引用注入(inject)的bean 服务 :

    { 
        List<Event> events = services.getEvents();
        for(Event event : events){
            map.put(event.getId() + "", event);
        } 
    }
    

    完全删除它,在 prepare() 方法或 @PostConstruct 方法或任何地方执行此类操作,但单独保留静态 block 。

也就是说,您正在遵循一些不良做法:

  • 您正在返回 "SUCCESS",而它应该是 "success"SUCCESS( “成功”)

  • 你正在将逻辑放在 setter 中,最好不要

  • 我还建议放弃 ModelDriven,完全放弃 Spring 和 use CDI ,但这是我的拙见。顺便说一句,确保到take a look at what I'm talking about .

关于java - 使用 Struts2 和 hibernate 创建 Web 服务(SOAP 或 REST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35622962/

相关文章:

angularjs - Angular HTML5 URLs - 服务器配置

java - HttpRequestHandlingMessagingGateway PayloadExpression java 配置

java - HibernateDaoSupport ,事务不回滚

hibernate - 保存在资源库中时,带有@CreationTimestamp批注的字段为null

java - GSON 和 InstanceCreator 问题

java - Spring security 阻止 css、js 文件加载到 jsp 页面上

java - JAXP XPathFactory 命名空间

java - Hibernate 中带参数的 createSQLQuery

java - 将方法中的数据类型应用于主测试器类中的变量时出错

java - 将 java 代码转换为 Objective C 的问题