簡體   English   中英

如何在Spring中使用RestTemplate發布到REST服務

[英]How do I post to a REST service using RestTemplate in Spring

如何使用RestTemplate發布到REST服務。 我具有以下RESTful Web服務,並且我想使用RestTemplate將新的用戶對象發布到?

@Controller
@RequestMapping("/api")
class APIController
{

    private static final Logger logger = LoggerFactory.getLogger(APIController.class);

    private MappingJacksonJsonView  jsonView = new MappingJacksonJsonView();

    @RequestMapping(value = "/{id}", method = RequestMethod.POST)
    @ResponseBody
    public User updateCustomer(@PathVariable("id") String id, @RequestBody User user) {

        logger.debug("I am in the controller and got user name: " + user.toString());
        return user;
    }
}

如何更改以下代碼以發布用戶對象?

    RestTemplate rt = new RestTemplate(commons);
    rt.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
    rt.getMessageConverters().add(new StringHttpMessageConverter());

    URI uri = new URI("http://" + mRESTServer.getHost() + ":8080/springmvc-rest-secured-test/api/2");

    User u = new User();
    u.setName("Johnathan M Smith");
    u.setUser("JMS");


    User returns = rt.postForObject(uri, u, User.class);

    LOGGER.debug("User:  " + u.toString());

這是我得到的錯誤和輸出:

    2013-06-18 08:11:36,819 [main] ERROR com.johnathanmarksmith.springresttemplate.Main - error:  <html><head><title>JBoss Web/7.0.13.Final - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 400 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The request sent by the client was syntactically incorrect ().</u></p><HR size="1" noshade="noshade"><h3>JBoss Web/7.0.13.Final</h3></body></html>
Exception in thread "main" org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@71290aac; line: 1, column: 2]

我明白了..為RESTful服務編碼用戶對象的程序員沒有

public User()
{
}

一旦將其添加到用戶對象,一切都將正常工作..這不是客戶端問題.. 它在服務器端

我注意到至少兩個問題:

第一個是您將請求發送到錯誤的URL。 我們的控制器方法的請求映射如下:

@RequestMapping(value = "/user/{id}", method = RequestMethod.POST )

但是您發送請求到URL:

"http://" + mRESTServer.getHost() + ":8080/springmvc-rest-secured-test/json/user/2"

您可能要從路徑中刪除字符串“ json”。

第二個問題是您的控制器方法返回一個User對象,但是當您調用RestTemplate類的postForObject()方法時,您聲明該控制器方法的返回類型為String

您應該更改以下行:

String returns = rt.postForObject(uri, u, String.class);

至:

User returns = rt.postForObject(uri, u, User.class);

有關此的更多詳細信息,請參見RestTemplate類的Javadoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM