java jersey中415不支持的媒体类型
我有下面的代码说415不支持MEDIA类型和服务器拒绝此请求的问题,因为请求实体的格式不支持 post方法。
随处搜索并做了所有事情但没有结果。
帮帮我!!
以下是主要代码
ActivityResource.java
@Path("activityresource") public class ActivityResource { private ActivityRepo activityRepo=new ActivityRepositoryStub(); @POST @Path("postActivity") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) public Activity createActivityParams(MultivaluedHashMap formse){ System.out.println(formse.getFirst("discription")); System.out.println(formse.getFirst("duration")); Activity activity=new Activity(); activity.setDiscription(formse.getFirst("discription")); activity.setDuration(Integer.parseInt(formse.getFirst("duration"))); activityRepo.create(activity); return activity; } }
Activity.java
package com.ws.model; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Activity { private String id; private String discription; private int duration; private User user; public String getId() { return id; } public void setId(String id) { this.id = id; } @XmlElement(name="desc") public String getDiscription() { return discription; } public void setDiscription(String discription) { this.discription = discription; } public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
User.java
package com.ws.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
的pom.xml
4.0.0 com.ws.app RestService 0.0.1-SNAPSHOT war RestServices org.apache.maven.plugins maven-compiler-plugin 3.2 true 1.8 1.8 2.17 org.glassfish.jersey jersey-bom ${jersey.version} pom import org.glassfish.jersey.media jersey-media-json-jackson org.glassfish.jersey.containers jersey-container-servlet org.glassfish.jersey.core jersey-server
WEB.XML
RestService Jersey Web Application org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages com.ws.app 1 Jersey Web Application /webapi/*
问题是您的方法参数类型MultivaluedHashMap
public Activity createActivityParams(MultivaluedHashMap formse){
处理application/x-www-form-urlencoded
和MultivaluedMap
的提供application/x-www-form-urlencoded
仅支持MultivaluedMap
或MultivaluedMap
注入。 你可以在源代码中看到
@Override public boolean isReadable(Class> type, Type genericType, Annotation[] annotations, MediaType mediaType) { // Only allow types MultivaluedMap and MultivaluedMap. return type == MultivaluedMap.class && (type == genericType || mapType.equals(genericType)); }
所以只需将方法参数更改为MultivaluedMap