gpt4 book ai didi

java - JAX-RS消耗json问题

转载 作者:行者123 更新时间:2023-12-02 01:49:12 25 4
gpt4 key购买 nike

我在 java 中的 @Consumes JSON 对象存在编码问题。

我使用 glassfish 服务器 4.1。

Json 示例:

 {
"name": "нцугкцукгцароцупацу",
"email": "text@gmail.com",
"message": "цкуцгкрпгукргшенгшукрпшгрук"
}

代码(来 self 的网络应用程序):

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 对象,并以某种方式为该对象设置编码(我猜是 UTF-8)...:)我也尝试过

@Consumes(MediaType.APPLICATION_JSON)
@Consumes("application/json")
@Consumes("application/json;charset=utf-8")

但没有任何改变:(

我会很高兴得到任何帮助。

最佳答案

你不能直接传递 JSON 对象,但你可以将它映射到 DTO 并传递

假设你的参数我有一个 DTO,我将使用它而不是 Json 对象

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";
}

关于java - JAX-RS消耗json问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com