首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring数据REST - RepositoryEventHandler方法没有为POST方法调用?

Spring数据REST - RepositoryEventHandler方法没有为POST方法调用?
EN

Stack Overflow用户
提问于 2017-06-05 12:37:21
回答 3查看 682关注 0票数 1

我有以下域对象并定义了DTO。

Country.java

代码语言:javascript
复制
@Data
@Entity
public class Country extends ResourceSupport {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long countryID;

    @NotBlank(message = "Country name is a required field")
    private String countryName;

    private String countryNationality;
}

CountryDTO.java

代码语言:javascript
复制
@Data

public class CountryDTO {

    private List<Country> countries;
}

我已经重写了国家类的RepositoryRestController中的POST方法。

代码语言:javascript
复制
@RepositoryRestController
public class CountryController {

    @Autowired
    private CountryRepository repo;

    @RequestMapping(method = POST, value = "countries")
    public @ResponseBody ResponseEntity<?> createCountry(@RequestBody Resource<CountryDTO> dto,
            Pageable page, PersistentEntityResourceAssembler resourceAssembler) {

        Country savedCountry = repo.save(dto.getContent().getCountries());
        return new ResponseEntity<>(resourceAssembler.toResource(savedCountry), HttpStatus.OK);
    }


}

现在,我已经定义了一个RepositoryEventHandler来处理验证。

代码语言:javascript
复制
@Component
@RepositoryEventHandler
public class CountryHandler {


    @HandleBeforeCreate
    public void handleBeforeCreate(Country country) {

        System.out.println("testing");

}

但是,当我向端点http://localhost:8080/countries发送POST请求时,就不会调用均衡器。我做错什么了吗?

更新1:我使用Postman向端点发送以下JSON。

代码语言:javascript
复制
"countries":[{
    "countryName":"Australia",
    "countryNationality":"Australian"

}]
EN

回答 3

Stack Overflow用户

发布于 2017-06-05 12:41:48

在不知道如何调用请求的情况下,很难给出确切的解决方案。但可能的原因是您缺少斜杠符号@RequestMapping值属性:

代码语言:javascript
复制
@RequestMapping(method = POST, value = "countries")

应:

代码语言:javascript
复制
@RequestMapping(method = POST, value = "/countries")
票数 0
EN

Stack Overflow用户

发布于 2017-06-05 12:50:52

在AppConfigration中将Bean定义为

代码语言:javascript
复制
@Configuration
@EnableAsync
public class AppConfig {

  @Bean
    CountryHandler countryHandler (){
        return new CountryHandler ();
    }

}

那就行了。

票数 0
EN

Stack Overflow用户

发布于 2017-06-05 14:26:48

尝试从以下位置编辑Controller类注释:

代码语言:javascript
复制
@RepositoryRestController

代码语言:javascript
复制
@RestController

方法注释主要来自:

代码语言:javascript
复制
@RequestMapping(method = POST, value = "countries")

代码语言:javascript
复制
@RequestMapping(value = "/countries", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)

PS:如果您要返回json,请使用produces = MediaType.APPLICATION_JSON_VALUE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44369093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档