Jersey REST 使用来自 JSON 的地图

Jersey REST consuming map from JSON

我正在尝试将客户端发送的 JSON 对象消费到 Map(或 JSON 对象)中。我使用的是 Jersey2.22.1,默认情况下它使用的是 MOXY。尝试了如下所示的 HashMap,但没有成功。它给出 415 错误 - "Unsupported Media Type"

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<Task> addTask(HashMap<String,Object> dynamicParam){

尝试使用自定义 class 以及包装地图。再次出现同样的错误。有人可以帮助我,让我知道如何处理地图。

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

作为临时解决方案,我使用以下代码。但是想知道如何使用 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());

您的客户端没有发送 Accept: application/json header.

结合使用@Consumes({MediaType.APPLICATION_FORM_URLENCODED})javax.ws.rs.core.MultivaluedMap 工作示例: JS-Client:

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!');

    }
});

Jersey-Code:

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