Java JAX-RS使用json问题
我在java中有一个@Consumes JSON对象的编码问题 我使用glassfish服务器4.1 Json示例:Java JAX-RS使用json问题,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我在java中有一个@Consumes JSON对象的编码问题 我使用glassfish服务器4.1 Json示例: { "name": "нцугкцукгцароцупацу", "email": "text@gmail.com", "message": "цкуцгкрпгукргшенгшукрпшгрук" } 我的web应用程序中的代码: public static final String ENCODING = ";charset=utf-8"; @PO
{
"name": "нцугкцукгцароцупацу",
"email": "text@gmail.com",
"message": "цкуцгкрпгукргшенгшукрпшгрук"
}
我的web应用程序中的代码:
public static final String ENCODING = ";charset=utf-8";
@POST
@Path("sendTest")
@Produces(MediaType.APPLICATION_JSON + ENCODING)
@Consumes(MediaType.APPLICATION_JSON + ENCODING)
public String sendTest(@Context HttpServletRequest request, JsonObject jsonObject ) {
try {
logger.info("encoding - " + request.getCharacterEncoding());
logger.info("name - " + new String(jsonObject.getName().getBytes("UTF-8"), "UTF-8"));
logger.info("msg - " + jsonObject.getMessage());
} catch (Exception e) {
logger.error(e);
return "ERROR";
}
return "OK";
}
JsonObject是一个简单的pojo对象和jpa实体
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "jsonObject")
public class JsonObject implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String email;
private String message;
public JsonObject() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@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;
}
JsonObject other = (JsonObject) 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 "JsonObject [id=" + id + ", name=" + name + ", email=" + email + ", message=" + message + "]";
}
}
结果:
[ INFO] encoding - UTF-8.
[ INFO] name - ??????????.
[ INFO] msg - ???????????.
当我这样尝试时:
@POST
@Path("sendTestParam")
@Produces(MediaType.APPLICATION_JSON + ENCODING)
@Consumes(MediaType.APPLICATION_JSON + ENCODING)
public String sendTestParam(@Context HttpServletRequest request, @QueryParam("name") String name, @QueryParam("email") String email,
@QueryParam("message") String message) {
try {
logger.info("encoding - " + request.getCharacterEncoding());
logger.info("name - " + name);
logger.info("email - " + email);
logger.info("msg - " + message);
} catch (Exception e) {
logger.error(e);
return "ERROR";
}
return "OK";
}
一切正常;
但我想使用json对象,并不知何故为这个对象设置encodingUTF-8…:
我也试过了
@Consumes(MediaType.APPLICATION_JSON)
@Consumes("application/json")
@Consumes("application/json;charset=utf-8")
但一切都没有改变:
我很乐意提供任何帮助。您可以直接传递JSONObject,但您可以将其映射到DTO并传递 假设您的参数有一个DTO,我将使用它而不是JsonObject
class DummyTO {
private String name;
private String email;
private String message;
// getter setter
}
@POST
@Path("sendTest")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String sendTest(@Context HttpServletRequest request, DummyTO dummtTO ) {
try {
dummyTO.getMessage();
} catch (Exception e) {
logger.error(e);
return "ERROR";
}
return "OK";
}