来自JSON的映射

来自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){ 通过包装映射也尝试了自定义类。再次出现相同的错误。是否有人可以帮助我并让我

我试图将客户端发送的JSON对象使用到映射(或JSON对象)中。我使用的是Jersey2.22.1,默认情况下它使用的是MOXY。尝试了如下所示的HashMap,但没有成功。它给出415错误-“不支持的媒体类型”

@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);
}