gpt4 book ai didi

java - 具有多个自定义对象的 @Restcontroller 方法

转载 作者:行者123 更新时间:2023-12-01 11:17:14 25 4
gpt4 key购买 nike

我有一个 Spring RestController,

@RestController
public class TestController {

@RequestMapping("/checkTestObject")
public MyPOJOObject3 checkTestObject(MyPOJOObject1 obj1, MyPOJOObject2 obj2) {
//Using obj1 and obj2 - business logic
return new MyPOJOObject3();
}
}

其中 MyPOJOObject1、MyPOJOObject2 和 MyPOJOObject3 是我用 setter 和 getter 字段定义的 3 个自定义对象。我尝试过的客户,

public class TestClient(
public static void main(String args[]){

MyPOJOObject1 obj1 = new MyPOJOObject1();
obj1.setInfoChgDate(new Date());
obj1.setInfoRegUserName("NEW_USER");
MyPOJOObject2 obj2 = new MyPOJOObject2();
obj2.setId(121l);
obj2.setDescription("Hello TestDemo");

String url = "http://localhost:8080/TestApp/checkTestObject";
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
formData.set("obj1", obj1);
formData.set("obj2", obj2);
// Prepare acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.ALL);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(formData, headers);
ResponseEntity<MyPOJOObject3> response = null;
try {
response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, MyPOJOObject3.class);
logger.debug(url + " :: response :: " + response.toString());
} catch (Exception exception) {
logger.error(url + " :: Exception thrown :: ", exception);
}
//response.getBody();
}
)

当我在 tomcat 上部署 RestController 并运行客户端时,出现错误,

2015-07-27 14:54:47,230 [main] ERROR TestController - http://localhost:8080/TestApp/checkTestObject :: Exception thrown :: 
org.springframework.web.client.HttpClientErrorException: 405 Method Not Allowed
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:607)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:565)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:521)

我的问题是,这是使用 Spring 通过 REST 发送和接收自定义对象的正确方法还是还有其他方法?我尝试使用其他 RestTemplate 方法,如 getForObject、postForObject、postForLocation 等,但没有成功。请告诉我是否有任何标准方法可以通过 REST 通过 JSON 发送接收复杂对象,或者我必须采用类似的方式 - 将对象转换为 JSON 字符串 - 发送 - 将 JSON 字符串转换回对象,反之亦然。请让我知道这些选项,因为我对这里的工作感到震惊

谢谢

最佳答案

405 Method Not Allowed

这意味着您正在尝试POST到非POST的方法。 @RequestMapping 默认方法是GET。将您的 Controller 代码更改为以下内容。

更新

@RestController
public class TestController {

@RequestMapping(value="/checkTestObject", method=RequestMethod.POST)
public MyPOJOObject3 checkTestObject(@RequestParam MyPOJOObject1 obj1, @RequestParam MyPOJOObject2 obj2) {
//Using obj1 and obj2 - business logic
return new MyPOJOObject3();
}
}

要修复 400 Bad Request 错误,您需要在 obj1 和 obj2 之前添加 @RequestParam。因为您将它们作为表单数据的一部分发送。请看上面的代码。

关于java - 具有多个自定义对象的 @Restcontroller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com