【问题标题】:How to get a string sent in body of a request inside a Spring restful webservice?如何在 Spring RESTful Web 服务中获取请求正文中发送的字符串?
【发布时间】:2014-08-08 11:13:41
【问题描述】:

我有一个 Spring Web 服务方法,我想获取一个字符串作为参数。该字符串在请求正文中发送。我的网络服务类是:

@Controller
@RequestMapping(value = "/users/{uid}/openchart")
public class OpenChartWebService {

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public String saveABC(@PathVariable("uid") Long uid, 
            @RequestBody String myString) {
            System.out.println("sent string is: "+myString);
            return "something";
    }
}

我在正文中的要求是:

   {
      "name":"Ramesh"
    }

但这不起作用。这显示“错误请求”HTTP 错误 (400)。如何在正文中发送字符串以及如何在webservice方法中获取正文中发送的字符串?

【问题讨论】:

  • 尝试在 @RequestMapping 上指定媒体类型(方法 = RequestMethod.POST,产生 = MediaType.APPLICATION_JSON_VALUE,消耗 = MediaType.APPLICATION_JSON_VALUE)
  • 它没有用。如果我做@RequestBody(SomeUserDefinedClass object),那么我可以得到那个特定的对象。我只想发送一个字符串参数,因此我不想增加创建另一个类的开销。
  • 错误请求错误消失了。现在,当我运行它时,我得到“sent string is: null”。

标签: java spring web-services rest


【解决方案1】:

正如@Leon 建议的那样,您应该将媒体类型添加到您的请求映射中,但还要确保您的类路径中有 Jackson。您还需要将 @RequestBody 参数类型更改为具有“名称”属性的东西,而不仅仅是一个字符串,这样您就不必在之后进行转换。

public class Person {
    private name;

    public getName() {
        return name;
    }
}

如果您的数据对象与上述类似,那么您可以将 @RequestBody 参数设置为 Person 类型。

如果你想要的只是一个字符串,那么也许只是在你的请求正文中传递“name”的值,而不是一个具有 name 属性的对象。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多