我正在使用spring boot,如果我使用jsonobject类型请求制作restcontroller或控制器,那么它不起作用,而当我将type更改为string时也一样。
@Controller
@RequestMapping("rest/dummy")
public class CustomerController {
@GetMapping("test")
public ResponseEntity test(@RequestParam("req") JSONObject inputData) {
org.json.JSONObject response = new org.json.JSONObject();
response.put("abc", "123");
return new ResponseEntity(inputData.toString(), HttpStatus.OK);
}
的pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20171018</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
我确实想要将它与GET和POST类型一起使用,并且我也希望将jsonobject用于请求和响应,因为数据可以随时更改及其类型。
答案 0 :(得分:2)
在RequestParam中,我们发送在URL中添加的键值, 要发送Json对象,请在RequestBody中发送它。
使用@RequestBody并在您的请求的正文部分发送您的Json。
答案 1 :(得分:0)
使用真正的POJO作为参数和返回值是更好的方法imo。使用Jackson注释配置这些POJO。
反正。这应该有效:
@GetMapping("test")
public ResponseEntity<String> test(@RequestParam("req") JSONObject inputData) {
org.json.JSONObject response = new org.json.JSONObject();
response.put("abc", "123");
return ResponseEntity.ok(inputData.toString());
}
替代地
@GetMapping("test")
public ResponseEntity<SomeOutputDto> test(@RequestParam("req") String inputData) {
SomeOutputDto out = new SomeOutputDto();
out.setAbc(123);
return ResponseEntity.ok(dto);
}
这需要一个额外的类:SomeOutputDto,但另一方面,您可以更好地控制代码。
public class SomeOutputDto {
private int abc = 0;
public void setAbc(int v) {
this.abc = v;
}
public int getAbc() { return this.abc; }
}
答案 2 :(得分:0)
使用apache-tomcat 8.0.15工作,同样不能用于apache-tomcat 8.0.49