【发布时间】:2017-02-23 11:16:34
【问题描述】:
我在 Jersey 有一个 REST 服务,我正在使用 Postman
实现它我在邮递员中收到以下错误:
415 不支持的媒体类型
我试过 this 、 this 、 this 和 this 。没有任何效果。
我正在发送 JSON,请求方法是 PUT
我正在尝试通过服务中的方法更新资源,称为
更新消息。
我的代码:
package org.glassfish.jersey.archetypes.jersey_quickstart_webapp.resources;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.archetypes.jersey_quickstart_webapp.model.Message;
import org.glassfish.jersey.archetypes.jersey_quickstart_webapp.service.MessageService;
@Path("/messages")
public class MessageResource {
MessageService messageService = new MessageService();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Message> getMessages()
{
return messageService.getAllMessages();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Message addMessage(Message message)
{
return messageService.add(message);
}
@PUT
@Path("/{messageId}")
public Message updateMessage(@PathParam("messageId")long id,Message message)
{
message.setId(id);
return messageService.updateMessage(message);
}
@GET
@Path("/{messageId}")
@Produces(MediaType.APPLICATION_JSON)
public Message getMessage(@PathParam("messageId")long id)
{
return messageService.getMessage(id);
//return "Got Path Param" + messageId;
}
}
/////////////////////我的服务///////////////// ///////////
package org.glassfish.jersey.archetypes.jersey_quickstart_webapp.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.glassfish.jersey.archetypes.jersey_quickstart_webapp.database.DatabaseClass;
import org.glassfish.jersey.archetypes.jersey_quickstart_webapp.model.Message;
public class MessageService {
private Map<Long, Message> messages = DatabaseClass.getMessages();
public MessageService() {
messages.put(1l, new Message(1, "Hello World", "Nishil"));
messages.put(2l, new Message(2, "Hello Jersey", "Nishil"));
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<Message> getAllMessages()
{
messages.values();
return new ArrayList<Message>(messages.values());
}
public Message getMessage(long id)
{
return messages.get(id);
}
public Message add(Message message)
{
message.setId(messages.size()+1);
messages.put(message.getId(), message);
return message;
}
public Message updateMessage(Message message)
{
if(message.getId()<=0)
{
return null;
}
messages.put(message.getId(), message);
return message;
}
public Message removeMessage(long id)
{
return messages.remove(id);
}
}
【问题讨论】:
-
所以除了
PUT,其他一切都正常吗? -
是的,其他一切正常
-
我也尝试将@Produces(MediaType.APPLICATION_JSON) 更改为@Produces("application/json")
-
你是否在邮递员中设置了
Content-Type标头? -
将内容类型放在标题而不是正文中