来自JSON的映射
我试图将客户端发送的JSON对象使用到映射(或JSON对象)中。我使用的是Jersey2.22.1,默认情况下它使用的是MOXY。尝试了如下所示的HashMap,但没有成功。它给出415错误-“不支持的媒体类型”来自JSON的映射,json,rest,jersey-2.0,moxy,Json,Rest,Jersey 2.0,Moxy,我试图将客户端发送的JSON对象使用到映射(或JSON对象)中。我使用的是Jersey2.22.1,默认情况下它使用的是MOXY。尝试了如下所示的HashMap,但没有成功。它给出415错误-“不支持的媒体类型” @POST @使用(MediaType.APPLICATION_JSON) @产生(MediaType.APPLICATION_JSON) 公共列表addTask(HashMap dynamicParam){ 通过包装映射也尝试了自定义类。再次出现相同的错误。是否有人可以帮助我并让我
@POST
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共列表addTask(HashMap dynamicParam){
通过包装映射也尝试了自定义类。再次出现相同的错误。是否有人可以帮助我并让我知道如何处理映射
@XmlRootElement
public class DynamicFormData {
Map<Object,Object> data;
public Map<Object, Object> getData() {
return data;
}
public void setData(Map<Object, Object> data) {
this.data = data;
}
@XmlRootElement
公共类DynamicFormData{
地图数据;
公共地图getData(){
返回数据;
}
公共void setData(地图数据){
这个数据=数据;
}
作为一个临时解决方案,我使用下面的代码。但想知道如何正确地使用Map
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<Task> addTask(String dynamicParam){
log.info("addTask Start");
Gson gson = new Gson();
Map<String, Object> map = new HashMap<String, Object>();
map = (Map<String, Object>)gson.fromJson(dynamicParam, map.getClass());
@POST
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共列表addTask(字符串dynamicParam){
log.info(“添加任务启动”);
Gson Gson=新的Gson();
Map Map=newhashmap();
map=(map)gson.fromJson(dynamicParam,map.getClass());
您的客户端不发送接受:应用程序/json
头。使用@消费({MediaType.application\u FORM\u URLENCODED})
与javax.ws.rs.core.MultivaluedMap
工作示例:
JS客户端:
function postCalling(){
$.ajax({
type: 'POST',
url: "<url>",
contenttype: "application/json",
datatype: "json",
data: {
'paramOne': 'ONE',
'paramTwo' : 'TWO'
},
success: function (data, status, jqXHR) {
alert('It worked!: '+JSON.stringify(data));
},
error: function (jqXHR, status) {
alert('didnt work!');
}
});
函数后调用(){
$.ajax({
键入:“POST”,
url:“”,
contenttype:“应用程序/json”,
数据类型:“json”,
数据:{
“paramOne”:“ONE”,
“第二个”:“第二个”
},
成功:功能(数据、状态、jqXHR){
警报('It worked!:'+JSON.stringify(data));
},
错误:函数(jqXHR,状态){
警惕(“没用!”);
}
});
泽西岛代码:
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Path("/sample")
public String getCumGa1Json(MultivaluedMap<String, String> postDataMap) {
System.out.println(postDataMap.get("paramOne").get(0));
//prints ONE
System.out.println(postDataMap.get("paramTwo").get(0));
//prints TWO
return toJSon(anObject);
}
@POST
@产生({MediaType.APPLICATION_JSON})
@使用({MediaType.APPLICATION\u FORM\u URLENCODED})
@路径(“/sample”)
公共字符串getCumGa1Json(多值映射postDataMap){
System.out.println(postDataMap.get(“paramOne”).get(0));
//打印一张
System.out.println(postDataMap.get(“paramtoo”).get(0));
//打印两张
返回到JSON(一个对象);
}
检查您的客户端是否仅发送JSON对象。并要求客户端将标题内容类型header设置为application/jsonYes,这仅是正确的。我可以将类型更改为String public List addTask(String dynamicParam){并生成以下数据{“data”:{“name”:“sanu”,“age”:“42”,“cars”:[“Saab”,“Volvo”,“BMW”},“String”:“任务详细信息”}MOXy不擅长于Map
s。你有没有想过改用Jackson?如果你不想改用Jackson的话,也许这会有帮助。Yashpandey@CássioMazzochiMolin和FrAn…谢谢你的帮助!!我改用Spring REST,它使用Jackson,并且与HashMap一起工作很好。谢谢你的帮助!!这是我的客户。我不认为客户端有任何问题。客户端是一个接受POJO(自定义类-工作正常)的工作代码。只需将其重用为HashMap。$.ajax({dataType:“json”,url:,data:json.stringify(pasingObject),type:'POST',contentType:“application/json”,success:function(data){alert(“添加成功”)tasksTable.ajax.reload();},错误:函数(e){alert(e.message);console.log(e.message);}
请使用完整的请求编辑问题。从浏览器或网络捕获。您的客户端可以工作,因为服务器在接受请求时没有Accept标头。谢谢,我将尝试此操作。目前,我切换到Spring REST(使用Jackson),它与HashMap配合良好。我相信这与Jerssy使用的Moxy有关(没有尝试将此更改为Jackson)
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Path("/sample")
public String getCumGa1Json(MultivaluedMap<String, String> postDataMap) {
System.out.println(postDataMap.get("paramOne").get(0));
//prints ONE
System.out.println(postDataMap.get("paramTwo").get(0));
//prints TWO
return toJSon(anObject);
}