【问题标题】:Get URL parameter for crit use Spring MVC Hibernate获取暴击使用 Spring MVC Hibernate 的 URL 参数
【发布时间】:2017-06-29 11:45:58
【问题描述】:

我想列出所有符合条件的用户,其中 id = formId。该代码正在运行,但只是列出了所有用户,而不是被 formId 过滤。请告诉我我在哪里做错了。如果您需要更多信息来解决这个问题,请告诉我!

控制器

*url = http://localhost:8080/User/Panda?Id=1

@RequestMapping(value = {"/{name}?Id={id}" }, method = RequestMethod.GET)
public String listClinicUser(ModelMap model, @PathVariable("id") Integer id) {      
    logger.info("Users List Page - Id = " + id);

    List<User> user = service.findAllUsers(id); 
    model.addAttribute("users", user);   

    return "user/list";
}   

服务

public List<User> findAllUsers(Integer id) {
    return dao.findAllUsers(id);
}

DAO 类

public interface UserDao {

    List<User> findAllUsers(Integer id);
}

*DAOImpl 类

@SuppressWarnings("unchecked")
public List<User> findAllUsers(Integer id) {
    Criteria crit = createEntityCriteria();
    crit.add(Restrictions.eq("formId",id));
    crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    List<User> users = (List<Usert>) crit.list();

    return users;
}

*对于我在另一个类中创建的 createEntityCriteria() 调用 abstractDao 并扩展到它。

private final Class<T> persistentClass;

@SuppressWarnings("unchecked")
public AbstractDao(){ 
    this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}

protected Criteria createEntityCriteria(){
    return getSession().createCriteria(persistentClass);
}

类实体

@Entity
@Table(name="USER")
public class User implements Serializable{

    @NotEmpty
    @Column(name="formId", nullable=false)
    private Integer formId;

    @NotEmpty
    @Column(name="FIRST_NAME", nullable=false)
    private String firstName;

    @NotEmpty
    @Column(name="LAST_NAME", nullable=false)
    private String lastName;

    public Integer getFormId() {
        return formId;
    }

    public void setFormId(Integer formId) {
        this.formId= formId;
    }

...

}

【问题讨论】:

  • 同时添加用户实体类。
  • @StanislavL 已添加!
  • 据我所见,看起来不错。您能否提供更多信息 - dao 代码? createEntityCriteria(); ?
  • @StanislavL 我添加了,但与此方法相关的代码并不多。希望对您有所帮助!
  • 我发现发布的代码没有问题...

标签: spring hibernate model-view-controller


【解决方案1】:
value = {"/{name}?Id={id}" }

这是提取 URL 参数的错误方法。如果你想获取 URL 参数,你应该使用 @RequestParam 注释将它传递给你的方法:

@RequestMapping(value = {"/{name}" }, method = RequestMethod.GET)
public String listClinicUser(ModelMap model, @RequestParam("Id") Integer id) {  
    //...
}

Spring 会自动传递您需要的值。例如?Id=1 Spring 会将 1 传递给您的控制器

【讨论】:

  • 如果我删除了我的 id,我还需要从 url 中删除吗?
  • 你可以试试上面的代码看看会不会和之前的结果一样
  • 我试图重新运行我的原始代码,它现在可以工作了。感谢您的帮助。
【解决方案2】:

在您的网址中,/{name} 是一个路径变量,并带有 @PathVariable 注释,如下所示:

@RequestMapping(value = "/foo/bar/{name}", method = GET)
@ResponseBody
public String getBarByName(@PathVariable String name) { ... }

?Id=id 是一个请求参数,并带有@RequestParam 注释,所以如果我们像这样映射到url:

http://localhost:8080/api/foo/bar?id=100

我们这样做

@RequestMapping(value = "/foo/bar", method = GET)
@ResponseBody
public String getBarById(@RequestParam("id") Integer id) { ... }

所以将它们结合起来映射到您的网址:

@RequestMapping(value = {"/{name}" }, params = "id", method = RequestMethod.GET)
public String listClinicUser(ModelMap model, @PathVariable String name, @RequestParam("id" Integer id)) { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多