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);
}
我正在尝试将客户端发送的 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);
}