【问题标题】:PUT - Sending JSON - Unsupported Media TypePUT - 发送 JSON - 不支持的媒体类型
【发布时间】:2017-02-23 11:16:34
【问题描述】:

我在 Jersey 有一个 REST 服务,我正在使用 Postman

实现它

我在邮递员中收到以下错误:

415 不支持的媒体类型

我试过 thisthisthisthis 。没有任何效果。

我正在发送 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 标头?
  • 将内容类型放在标题而不是正文中

标签: json spring rest jersey


【解决方案1】:

您需要在 Postman 中设置 Content-Type: application/json 标头。我相信如果你不设置它,它只是默认为text/plain,因此是“不支持的媒体类型”。

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 2020-01-25
    • 2015-07-12
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多