JBoss登录Web应用程序错误-无法分析请求:java.lang.IllegalArgumentException:查询中的非法字符

JBoss登录Web应用程序错误-无法分析请求:java.lang.IllegalArgumentException:查询中的非法字符,java,jquery,json,rest,jboss,Java,Jquery,Json,Rest,Jboss,我正在尝试开发一个登录系统,我遵循了Ticketmonster的结构。只有在登录后,main.html中的菜单容器才会被填充,内容会被登录模板填充,路由器会立即呈现登录视图,并应用该模板。单击“登录”按钮后,将创建一个Ajax请求并发送到其服务 这是登录视图中的登录功能: ` 这就是服务。更改为@Consumes会导致相同的结果 ` 这是服务器错误。经过一些研究,我想可能是 一个转义字符串问题,但我不认为它适用于TicketMonster 代码,或在教程中讨论 警告[org.jbos

我正在尝试开发一个登录系统,我遵循了Ticketmonster的结构。只有在登录后,main.html中的菜单容器才会被填充,内容会被登录模板填充,路由器会立即呈现登录视图,并应用该模板。单击“登录”按钮后,将创建一个Ajax请求并发送到其服务

  • 这是登录视图中的登录功能:
`

  • 这就是服务。更改为@Consumes会导致相同的结果
`

  • 这是服务器错误。经过一些研究,我想可能是 一个转义字符串问题,但我不认为它适用于TicketMonster 代码,或在教程中讨论
警告[org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher](http localhost/127.0.0.1:8180-6)无法分析请求。错误:java.lang.IllegalArgumentException:索引38处的查询中的非法字符:localhost:8180/MCC2/rest/users?{%22username%22:%22wakas%22,%22password%22:%22password%22}&&=1426754780833 在java.net.URI.create(URI.java:859)[rt.jar:1.7.0\u 03]

  • 这是Firebug上的错误
获取本地主机:8180/MCC2/rest/users?{%22usernam…2,%22password%22:%22password%22}&=1426757495550 400错误请求 19ms
jquery-2.0.3.js(第7845行) “网络错误:400错误请求-本地主机:8180/MCC2/rest/users?{%22username%22:%22User%20Name%22,%22password%22:%22password%22}&=1426757495550” 用户?{…7495550 SyntaxError:JSON.parse:JSON数据login.js(第49行,第41列)第1行第1列的意外字符 var errors=$.parseJSON(error.responseText).errors

  • 切换Ajax请求的类型和服务上的注释 发布时,在服务器上没有给出错误,但在Firebug中出现以下错误
POST本地主机:8180/MCC2/rest/users 405方法不允许 8毫秒 jquery-2.0.3.js(第7845行) “NetworkError:405方法不允许-本地主机:8180/MCC2/rest/users”

  • 我在服务开始时设置了一个断点,并且在所有 在任何情况下,都不会输入服务
更新: 虽然我写这篇文章时使用了GET请求,但我觉得它应该是一个post请求,在这种情况下,问题将是Firebug错误的原因

此外,在部署应用程序时,我遇到以下错误: 原因:org.hibernate.MappingException:无法确定列:[org.hibernate.mapping.Column(userListIds)]在表:User中的java.util.Set的类型

下面是用户(不包括setter和getter):

`

@SuppressWarnings(“串行”)
@实体
公共类用户实现可序列化{
@身份证
@生成值
私人长id;
@NotNull
@尺寸(最小值=5,最大值=16)
@模式(regexp=“[a-zA-Z0-9_234;]*”,message=“必须仅包含小写和大写字母、数字和下划线!”)
@列(唯一=真)
私有字符串用户名;
@NotNull
@尺寸(最小值=5,最大值=16)
私有字符串密码;
@NotNull
@尺寸(最小值=1,最大值=25)
@模式(regexp=“[^0-9]*”,message=“不得包含数字”)
私有字符串名;
@NotNull
@尺寸(最小值=1,最大值=25)
@模式(regexp=“[^0-9]*”,message=“不得包含数字”)
私有字符串lastName;
@NotNull
@列(唯一=真)
@空空如也
@电子邮件(message=“不是有效的电子邮件格式”)
私人字符串电子邮件;
@尺寸(最小值=10,最大值=12)
@数字(分数=0,整数=12)
私有字符串电话号码;
@尺寸(最小值=1,最大值=300)
私有字符串描述;
//@NotNull我认为这句话:

data:JSON.stringify(userLoginRequest)
应该是

data:encodeURIComponent(JSON.stringify(userLoginRequest))

因为您需要对查询字符串中发送的任何数据进行URL编码。JSONification可能会生成需要在在线发送之前进行编码的字符,如果失败,服务器可能会遇到解析问题,这里就是这种情况。

修复了错误,但现在:1.我想知道您为什么不需要在TicketTM中使用它onster?2.我现在遇到了一个不同的错误:WARN[org.jboss.resteasy.core.SynchronousDispatcher](http localhost/127.0.0.1:8180-7)无法执行GET/users:org.jboss.resteasy.spi.ReaderException:java.io.eofeException:由于输入结束,没有要映射到对象的内容。我感觉我应该一直在使用POST。更改为POST可以消除服务器错误,但会出现上面提到的Firebug错误。我应该在什么时候使用POST vs GET和消费s vs PRODUCTS?我修复了主要问题。转义字符似乎仅在GET请求中才需要。更改为POST将使用JSON.stringify(userLoginRequest)以所需格式发送userLoginRequest。对于POST,主要问题是1.请求类中没有伪构造函数。2.我在更新中提到的部署错误(UserListId)似乎已经产生了影响,所以现在我注释了所有涉及UserListID的内容,直到我让登录系统正常工作。服务断点正在中断,我正在修复一个新错误。我很快会更新:)在get vs POST上,get用于获取资源的状态。它是一个idem有效的操作-不应该更改资源的状态。因此,多个get不会更改状态,可能用于获取最新状态。在使用products vs Consumes时,它们分别表示HTTP响应正文或请求正文的内容类型。在注释方法时,您可以使用其中一个或两个get,具体取决于请求或请求sponse有一个需要适当解析的主体。这是必要的,因为客户端和服务器都不会假定内容类型为JSON、XML或任何其他内容类型。
@SuppressWarnings("serial")
@Entity
public class User implements Serializable {

@Id
@GeneratedValue
private Long id;

@NotNull
@Size(min = 5, max = 16)
@Pattern(regexp = "[a-zA-Z0-9_]*", message = "Must only contain small and capital letters, numbers, and underscore!")
@Column(unique=true)
private String username;

@NotNull
@Size(min = 5, max = 16)
private String password;

@NotNull
@Size(min = 1, max = 25)
@Pattern(regexp = "[^0-9]*", message = "Must not contain numbers")
private String firstName;

@NotNull
@Size(min = 1, max = 25)
@Pattern(regexp = "[^0-9]*", message = "Must not contain numbers")
private String lastName;

@NotNull
@Column(unique = true)
@NotEmpty
@Email(message = "Not a valid email format")
private String email;

@Size(min = 10, max = 12)
@Digits(fraction = 0, integer = 12)
private String phoneNumber;

@Size(min = 1, max = 300)
private String description;

//  @NotNull <--commented since we don't have a setter
private Date creationDate = new Date();

@NotNull
private Role role = Role.MEMBER;

@NotNull
private boolean enabled = true;

private Set<Long> userListIds = new HashSet<Long>();

public void addUserToUserlist(Long newUserId){
    userListIds.add(newUserId);
}

public void removeUserFromUserlist(Long newUserId){
    userListIds.remove(newUserId);
}

public Set<Long> getUserListIds() {
    return userListIds;
}

public void setUserListIds(Set<Long> userListIds) {
    this.userListIds = userListIds;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public Date getCreationDate() {
    return creationDate;
}

//  public void setCreationDate(Date creationDate) {
//      this.creationDate = creationDate;
//  }

public Role getRole() {
    return role;
}

public void setRole(Role role) {
    this.role = role;
}

public boolean isEnabled() {
    return enabled;
}

public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String name) {
    this.firstName = name;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (id == null) {
        if (other.id != null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    return true;
}

@Override
public String toString() {
    return "User [username=" + username + ", firstName=" + firstName
            + ", lastName=" + lastName + ", email=" + email
            + ", phoneNumber=" + phoneNumber + ", creationDate="
            + creationDate + ", role=" + role + ", enabled=" + enabled
            + "]";
}

}
data:JSON.stringify(userLoginRequest)
data:encodeURIComponent(JSON.stringify(userLoginRequest))