Java POST方法将反序列化json作为空字符串传递

Java POST方法将反序列化json作为空字符串传递,java,Java,我在寻找答案,但没有找到任何与我的问题类似的答案 我有一个简单的RESTAPI,作为学习项目编写,我很难在controller中创建适当的POST方法。其他基本命令都正常工作,只是这个命令让事情变得棘手 我的代码: 控制器: 存储库: 给出以下结果: 如果我理解正确,POST请求得到了处理,但由于某种原因,序列化的对象体丢失了,因此我收到了“无值”结果,但状态为200。我查阅了大量的网页和资料,在提供的代码中找不到错误。如果有任何额外的信息有帮助,我当然会提供。好的,您的测试期望响应的主体是JS

我在寻找答案,但没有找到任何与我的问题类似的答案

我有一个简单的RESTAPI,作为学习项目编写,我很难在controller中创建适当的POST方法。其他基本命令都正常工作,只是这个命令让事情变得棘手

我的代码: 控制器: 存储库: 给出以下结果:
如果我理解正确,POST请求得到了处理,但由于某种原因,序列化的对象体丢失了,因此我收到了“无值”结果,但状态为200。我查阅了大量的网页和资料,在提供的代码中找不到错误。如果有任何额外的信息有帮助,我当然会提供。

好的,您的测试期望响应的主体是JSON,并且有一个title属性。但是您的控制器方法返回void。如何将
void
转换为具有title属性的JSON对象呢?作为一个借口,我可以说我看这段代码的时间太长了。非常感谢你!
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/v1/foo")
public class TaskController {

    private final DbService dbService;
    private final FooMapper fooMapper;

    @Autowired
    public FooController(DbService dbService, FooMapper fooMapper) {
        this.dbService = dbService;
        this.fooMapper = fooMapper;
    }

    @RequestMapping(method = RequestMethod.POST, value = "/createFoo", consumes = APPLICATION_JSON_VALUE)
    public void createFoo(@RequestBody FooDto fooDto) {
         dbService.saveFoo(fooMapper.mapToFoo(FooDto));
    }
public interface FooRepository extends CrudRepository<Foo, Long> {

    @Override
    List<Foo> findAll();

    Optional<Foo> findByIdEquals(long fooId);

    @Override
    Foo save(Foo foo);

    @Override
    long count();

 }
@Service
public class DbService {

    @Autowired
    private FooRepository repository;

    public List<Foo> getAllFoos() {
        return repository.findAll();
    }

    public Foo saveFoo(final Foo foo) {
        return repository.save(foo);
    }

    public Optional<Foo> getFoo(final long fooId) {
        return repository.findByIdEquals(fooId);
    }

    public void deleteFoo (final long FooId) {
        repository.deleteById(fooId);
    }
}
@Test
public void testShouldCreateTask() throws Exception {
    //Given
    FooDtofookDto = new FooDto(1L, "Title", "Content");
    Foo foo = new Foo(1L, "Title after", "Content after");

    when(dbService.saveFoo(foo)).thenReturn(foo);

    //When&&Then
    Gson gson = new Gson();
    String jsonContent = gson.toJson(fooDto);
    System.out.println(jsonContent);
    mockMvc.perform(post("/v1/foo/createFoo")
            .contentType(MediaType.APPLICATION_JSON)
            .characterEncoding("UTF-8")
            .content(jsonContent))
            .andExpect(status().isOk())
            .andExpect((jsonPath("$.title", is("Title after"))));
}
MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /v1/foo/createFoo
       Parameters = {}
          Headers = {Content-Type=[application/json;charset=UTF-8]}
             Body = {"id":1,"title":"Title","content":"Content"}
    Session Attrs = {}

Handler:
             Type = com.crud.foos.controller.FooController
           Method = public void    com.crud.foos.controller.FooController.createFoo(java.lang.String,com.crud.foos.domain.FooDto)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: No value at JSON path "$.title"