【问题标题】:Why does this REST-service not return while the other does?为什么这个 REST 服务不返回而另一个呢?
【发布时间】:2017-01-09 12:48:53
【问题描述】:

情况 在下面的代码中,您可以看到 2 个 REST 服务都应该返回 MessageVO。第一个服务 (serviceThatDoesWork) 按预期返回 MessageVO,但第二个服务 (serviceThatDoesNotWork) 拒绝,它甚至根本不提供任何输出。 但是,使用 serviceThatDoesNotWork 返回响应 (java.ws.rs.core.Response) 确实会给出输出。即使我跳过“doStuff”方法并为每个服务创建一个完全相同的虚拟 MessageVO,第二个也不会返回任何内容。

问题 为什么第二个服务无法返回 MessageVO?当我尝试返回 MessageVO 时,它不会返回任何内容,并且日志中不会出现任何异常情况。 这两个服务需要返回完全相同的东西,但其中一个仍然不想返回任何东西,我在这里看不到什么? 可能是因为路径(和/或参数的数量)?

代码 MyServices.java:

@Path("/myService")
...
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/myPath/{param1}/{param2}/{param3}")
    public MessageVO serviceThatDoesWork(@PathParam("param1") Integer param1_id,  @PathParam("param2") Integer param2_id, @PathParam("param2") Integer param2_id) 
    {   
        List<SomethingVO> lstO = MyRestServiceBusiness.doStuff(param1_id, param2_id, param3_id);

        //return SUCCESS or FAIL message
        MessageVO msg = new MessageVO();
        if(lstO.size() > 0)
        {
            List<String> s = new ArrayList<String>();
            for(SomethingVO k : lstO)
            {
                s.add(k.getId().toString());
            }
            msg.setItem_ids(s);
            msg.setMsg("SUCCESS");
        }
        else
        {
            msg.setMsg("FAIL");
        }
        return msg;
    }
...
@GET
@Path("/myPath/{param1}/{param2}/{param3}/{param4}/.../{param15}{a:(/a/[^/]+?)?}{b:(/b/[^/]+?)?}")
public Response serviceThatDoesNotWork(@PathParam("param1")Integer param1_id, ..., @PathParam("param15") Integer param15_id,
            @PathParam("a") String a_id, @PathParam("b") String b_id)
    {       
        //PUT 'OPTIONAL' PARAMS IN A LIST
        List<Integer> lstI = new ArrayList<Integer>();
        String aId = a_id != null ? a_id.split("/")[2] : null;
        String bId = b_id != null ? b_id.split("/")[2] : null;
        if(aId != null)
        {
            lstI.add(Integer.parseInt(aId ));
        }
        if(bId  != null)
        {
            lstI.add(Integer.parseInt(bId ));
        }

        //DO STUFF
        String afsId = "";
        if(lstI.size() > 0)
        {
            afsId = MyRestServiceBusiness.doStuff(param1, ..., lstI);
        }

        //return SUCCESS or FAIL message
        MessageVO msg = new MessageVO();
        if(afsId != null && !afsId.isEmpty())
        {
            List<String> s = new ArrayList<String>();
            s.add(afsId);
            msg.setItem_ids(s);
            msg.setMsg("SUCCESS");
        }
        else
        {
            List<String> s = new ArrayList<String>();
            for(Integer i : lstI)
            {
                s.add(i.toString());
            }               
            msg.setItem_ids(s);
            msg.setMsg("FAIL");
        }           

        //WENT THROUGH ALL ABOVE CODE AS EXPECTED, MESSAGEVO HAS BEEN FILLED PROPERLY
        return msg; 
    }

代码 MessageVO.java:

@XmlRootElement
public class MessageVO 
{   
    private String msg;
    private List<String>  item_ids;


    //GETTERS
    @XmlElement(name = "Message")
    public String getMsg() {
        return msg;
    }
    @XmlElement(name = "Item ID's")
    public List<String> getItem_ids() {
        return item_ids;
    }


    //SETTERS
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public void setItem_ids(List<String>  item_ids) {
       this.item_ids = item_ids;
    }

如果我需要提供额外信息,请询问,这是我第一次尝试 (REST-) 服务。

【问题讨论】:

  • 你应该使用@Produces注解和serviceThatDoesNotWork方法
  • @Vaseph 哦,天哪,我不敢相信我错过了那部分!谢谢!

标签: java json web-services rest get


【解决方案1】:

正如 Vaseph 在评论中提到的,我只是忘记了第二个服务中的 @Produces 注释。

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2020-07-04
    • 2017-09-19
    • 2015-04-15
    • 2020-10-31
    相关资源
    最近更新 更多